Изменение стандартного поведения TextBox? - PullRequest
1 голос
/ 14 июля 2009

У меня есть приложение, которое объявляет текстовые поля в разных местах, например, в стилях и шаблонах данных, и теперь я нахожусь в ситуации, когда мне нужно изменить стандартное поведение каждого текстового поля для получения и потери фокуса.

Какой хороший способ сделать это?

Я думал о двух решениях: одно - извлечь новый класс из TextBox, который, как я понимаю, обычно осуждается. Другой - создать какой-то стиль, который использует EventSetters, но, поскольку у стилей и шаблонов данных в моем приложении нет файлов кодовой привязки, я не знаю, как событие найдет соответствующий обработчик события.

Ответы [ 4 ]

2 голосов
/ 14 июля 2009

Вы можете создать стиль, который будет применяться ко всем текстовым полям, используя свойство Key следующим образом:

<Style x:Key={x:Type TextBox}>
...
</Style>

Затем вы можете изменить свойство Template элемента TextBox и использовать триггеры для добавления специального поведения к событиям OnGotFocus и OnLostFocus.

2 голосов
/ 14 июля 2009

Исходя из ваших отзывов, я бы порекомендовал следующее поведение:

<TextBox b:TextBox.SuppressOnFocus="True"/>

Присоединенная реализация поведения будет просто присоединяться к GotFocus и LostFocus и очищать / повторно применять привязку в зависимости от ситуации.

0 голосов
/ 14 июля 2009

Если вы собираетесь использовать эту функцию только в одном проекте, вы можете создать UserControls, который имеет TextBox и получить доступ к свойствам OnFocus. Вы также можете создать пользовательский элемент управления WPF, который наследуется от TextBox, а затем реализовать событие LocusFocus.

Я использовал тот же подход для создания TextBox пользовательского элемента управления, который выполняет проверку:

http://www.highoncoding.com/Articles/578_Creating_WPF_TextBox_UserControl_to_Perform_Custom_Validation.aspx

0 голосов
/ 14 июля 2009

При нормальных обстоятельствах я бы тоже нахмурился при создании подкласса TextBox. В этом случае, поскольку вы меняете поведение TextBox, подкласс может быть вашим лучшим вариантом.

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