2011-11-01 126 views
2

This question給出了一個乾淨的方法,用於將窗口級別的鍵綁定到XAML中的ViewModel命令。這非常棒,但它不允許定製正在使用的密鑰。是否有可能將「key」值綁定到視圖模型,如果是,哪種類型的值是csharp中的「key」?綁定鍵綁定的鍵屬性

<Window.InputBindings> 
<KeyBinding Key="{Binding RefreshKey}" 
      Command="{Binding RefreshCommand}" /> 

或者是有可能在代碼中添加窗口級別鍵綁定?同樣的問題有把它放在代碼隱藏的解決方案,但如果可能的話,我寧願將代碼保存在ViewModel中。

回答

1

http://msdn.microsoft.com/en-us/library/system.windows.input.keygesture.aspx

對於KeyGesture XAML用法,即一般設置在XAML 屬性是手勢,在情況下,手勢代表一個標準鍵 和修飾鍵

... 請注意,XAML用法不直接聲明 元素。該對象元素的使用是不可能的,因爲KeyGesture 不公開公共默認構造函數。相反,XAML使用 使用typeconverter行爲來聲明整個KeyGesture內聯 作爲手勢屬性值。

我想你可以返回一個KeyGesture對象綁定一個關鍵屬性,或者您可以隨時返回一個字符串組成,它會自動轉換

+0

KeyGesture,完美!謝謝 – Tyrsius

0

屬性類型是enumeration Key,所以它應該足夠簡單,以便將它從視圖模型中公開並綁定到它。但是,正如您所鏈接到的問題所述,支持綁定KeyBinding直到WPF 4才被添加。

編輯:沒有意識到你要求的方式來調用一個命令作爲多個擊鍵的結果。請參閱我的博客文章here討論我如何解決這個問題。您可能需要修改它以適應WPF 4

+0

我不知道你將如何使用返回多個關鍵那種類型。像CTRL + R這樣的東西在單個值中是不可能的。 – Tyrsius

+0

對不起,誤解了你的問題。編輯我的帖子。 –

+0

我想你還是誤解了。我不是要求多個擊鍵,而是修改鍵。就Windows而言,Ctrl + R是一個關鍵。 – Tyrsius