Мы пишем приложение на основе 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);
};
... но я подозреваю, что я пошел по неверному пути.
Есть ли лучший способ связывания цепей? Есть ли лучший способ обработки событий фокусировки / вызова клавиатуры?