Есть ли способ обработки события GotFocus во всех текстовых полях во всех представлениях по соглашению? - PullRequest
2 голосов
/ 06 июля 2011

Мы пишем приложение на основе WPF, которое обычно используется на сенсорном планшете. Мы проектируем пользовательский интерфейс, чтобы избежать ввода текста, но бывают случаи, когда этого нельзя избежать. В то время мы хотим контролировать, когда и какой тип клавиатуры выдается для ввода.

Мы можем создать базовый пользовательский элемент управления, чтобы добавить соответствующий обработчик событий, но мне было интересно, есть ли способ сделать это по соглашению вместо этого.

Мы используем CaliburnMicro для нашей инфраструктуры MVVM, и поскольку она поддерживает настройку соглашений, я начал изучать 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);
         };

... но я подозреваю, что я пошел по неверному пути.

Есть ли лучший способ связывания цепей? Есть ли лучший способ обработки событий фокусировки / вызова клавиатуры?

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Я делал это раньше.Вы можете создать прикрепленное поведение , которое прослушивает PreviewGotKeyboardFocus на рассматриваемом элементе, вызывая отображение OnScreenKeyboard.Затем создайте стиль, который применяет прикрепленное поведение к этим элементам управления.В моем проекте у нас также были разные клавиатуры для разных типов ввода (например, текст или цифра).Прикрепленное поведение устанавливает KeyboardType для его свойства.На основе KeyboardType я бы отобразил соответствующую клавиатуру.

Если вам нужна дополнительная помощь, дайте мне знать.

1 голос
/ 06 июля 2011

Я думаю, что GotFocus является всплывающим событием, поэтому вы можете добавить обработчик к окну или странице, а затем захватить любые события GotFocus, которые всплывают на вершине вашего дерева элементов?Затем вы можете обрабатывать событие соответствующим образом или не обрабатывать его и разрешать другим зарегистрированным обработчикам обрабатывать его.Я предполагаю, что единственная проблема заключается в том, что TextBox обрабатывает и глотает событие, и я не уверен в этом.

HTH,

Барт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...