2012-06-04 41 views
0

我希望能夠允許用戶在運行時更改熱鍵。如何實現wpf鍵綁定

有沒有人有具體的例子,如何綁定代碼隱藏c#中的一個鍵來完成這個?

我想我必須做一個RoutedCommand的鍵綁定。假設我想用熱鍵在UI上按下一個按鈕。

eg ...讓用戶推F5點擊應用程序上的btnGo。

回答

0

命令的工作方式與您的想法有點不同。當您按下按鈕時,它不會觸發您應用程序中按鈕的點擊。相反,您可以定義一個命令(在這種情況下,您可以使用一個名爲「Go」的命令),並且可以將此命令分配給應用程序中的各種元素(菜單項,按鈕等)。所有這些項都會觸發命令並該命令具有執行代碼的「執行」功能。

如果您將CommandBindings添加到主窗口,則可以使用熱鍵來全局觸發這些命令。您可以輕鬆地將命令綁定在XAML通過這樣的代碼:

<Window.CommandBindings> 
    <CommandBinding Command="local:MyCommands.Go" CanExecute="GoCanExecute" Executed="Go" /> 
</Window.CommandBindings> 

要創建自己的命令,你可以在代碼中創建一個「RoutedUICommand」,並設置默認成員(默認名稱,默認熱鍵綁定等)。你很可能想把它變成一個類的靜態屬性。

然後,如果您想要更改或添加此命令的keybinds,您可以訪問此靜態屬性並修改InputGestures集合。您可以清除它,添加新的密鑰綁定,並根據需要進行更改。

+0

原來我能夠在xaml中保留命令綁定,只是定義一個keygesture並使用inputbinding來添加它。所以......它的工作原理......人們通常會爲點擊代碼中的內容做些什麼,比如灰色按鈕。所有這些代碼是否從點擊代碼中退出,而不是從代碼隱藏中完成? – user1435769

+0

對於支持命令的控件,它們將根據命令綁定的「CanExecute」屬性自動禁用。 CanExecute是一個你寫的函數,應該將e.CanExecute屬性設置爲true,如果你的函數可以在那時執行,否則返回false。 –

+0

我給出的代碼有一個CanExecute函數。問題在於還有其他的東西,比如生成的文件名在click事件中完成,稍後由該命令調用的代碼使用。有沒有辦法在熱鍵命令被觸發時調用點擊事件,或者這是一種不可能或不好的做事方式? – user1435769