我們正在編寫基於WPF的應用程序,通常用於觸摸屏平板電腦。我們正在設計用戶界面以避免文本輸入,但有時候這是無法避免的。對於那些我們想要控制什麼時候彈出什麼類型的鍵盤來輸入的時候。按照慣例,是否可以在所有視圖的所有文本框上處理GotFocus事件?
我們可以創建一個基本自定義控件來添加適當的事件處理程序,但我想知道是否有一種方法可以按照約定來完成此操作。
我們爲我們的MVVM框架使用CaliburnMicro,並且因爲它支持約定定製,我開始研究ConventionManager.AddElementConvention<TextBox>(null, null, "GotFocus")
,但調用它將取代任何現有的約定。我想過類似的東西:
var textboxConvention = ConventionManager.GetElementConvention(typeof(TextBox));
var oldBinding = textboxConvention.ApplyBinding;
textboxConvention.ApplyBinding =
(viewModelType, path, property, element, convention) =>
{
element.GotFocus += ((o, args) => ShowKeyboard((TextBox)o));
element.LostFocus += ((o, args) => HideKeyboard((TextBox)o));
return oldBinding(viewModelType, path, property, element, convention);
};
......但我懷疑我在這裏走錯了路。
有沒有更好的方法來鏈接綁定?有沒有更好的方式來處理焦點事件/調出鍵盤?
非常感謝,工作得很好。我沒有處理從一個控制切換到另一個控制的問題,在失去對舊的焦點之前,把重點放在新的控制火上。我會嘗試在RX中使用流。順便說一句我會對你使用的鍵盤感興趣,我們正在嘗試一些 – baralong
是的,我必須處理這種情況......基本上我所做的訣竅是我在PreviewGotFocused事件中存儲了Current focus元素。當收到新的GotFocused事件時,我會與當前元素進行比較,如果不同的註銷舊元素上的丟失焦點事件。我想我們使用了一個自定義的鍵盤,但後來在codeplex上找到了很多內置的WPFKB。 –