2010-06-08 50 views
3

使用熱鍵快捷方式創建菜單的正確/最佳方式是什麼?在WPF中使用快捷方式創建菜單的正確方法

我只是想要一個像Visual Studio那樣的文件菜單,它具有新建,打開,保存,全部保存,退出以及其他一些標準快捷方式。

似乎InputGestureText顯示適當的文本,但由於它被稱爲「文本」,似乎沒有觸發事件,我會假設這是不正確的做法。 Command體系結構看起來相當笨重,所以如果有更好的方法,我不想走這條路。

更新: 爲清楚起見,假設我使用下面的菜單:

<Menu> 
    <MenuItem Header="_File"> 
    <MenuItem Header="_New" /> 
    <MenuItem Header="_Open" /> 
    <Separator /> 
    <MenuItem Header="_Save" /> 
    <MenuItem Header="Save _All" /> 
    <Separator /> 
    <MenuItem Header="_Export"/> 
    <MenuItem Header="_Import"/> 
    <Separator /> 
    <MenuItem Header="E_xit"/> 
    </MenuItem> 
</Menu> 

,其中出口和進口將自定義快捷鍵;微軟並沒有將其構建成類似於ApplicationCommands的東西。你能否提供一個完整的解決方案,如果需要的話,包括C#定製代碼? (不僅可以幫助我,但我希望能幫助其他任何正在尋找類似問題的人。)

回答

13

注意到InputGestureText實際上沒有設置快捷方式,它只是在菜單上標記它,這是正確的。正確的方法是使用窗口的InputBindings。您可以將鍵盤快捷鍵映射到任何命令,包括您自己的模型定義的命令。但爲了這個工作,你需要使用綁定到命令的菜單項 - 不直接處理它們的點擊事件。這是在WPF中處理菜單命令的推薦方式。否則,你需要訴諸老式的鍵盤事件處理。

<Window.InputBindings> 
    <KeyBinding Key="A" Modifiers="Control" Command="{Binding MyAwesomeCommand}" /> 
</Window.InputBindings> 

More information MSDN上。

+0

嗯,這是一種將自定義快捷方式連接到自定義命令的新方法。它並沒有完全讓我去,但與MSDN的鏈接是非常有幫助的。 – 2010-06-08 05:07:33

+0

InputBinding使用戶能夠通過鍵盤快捷鍵調用該命令。要在菜單中顯示快捷方式,只需將InputGestureText屬性添加到適當的菜單: ' mrfelis 2017-04-20 14:57:00

4

請看ApplicationCommands類。您可以免費獲得標準鍵盤手勢(加速器)和文本。

<MenuItem Command="ApplicationCommands.Paste" Width="75" /> 
+0

當我將其添加到我的應用程序時,即使用戶專注於TextBox並且實際上可以進行復制和粘貼,菜單項也會被禁用。另外,自定義命令需要做什麼? – 2010-06-08 04:29:46

+0

@matt右..每個命令是一個Execute + CanExecute組合。如果CanExecute的計算結果爲false,菜單項將被禁用。即,如果還沒有任何內容被複制,PasteCmd.CanExecute將返回false(灰色顯示菜單項)。對於自定義命令 - 請參閱http://msdn.microsoft.com/en-us/library/system.windows.input.routedcommand.aspx – Gishu 2010-06-08 05:19:10

相關問題