Обнаружение кнопки по умолчанию на элементе управления - PullRequest
1 голос
/ 08 августа 2011

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

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

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

Чтобы создать такое поведение, я должен быть в состоянии обнаружить наличие кнопки по умолчанию в контейнере, и это должно быть сделано внутри кода c # элемента управления cutom.

Надеюсь, описание достаточно понятно. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Задумывались ли вы о реализации подхода MVVM и шаблона Command?Пока ваша модель представления знает, какие есть варианты, вы можете привязать кнопку по умолчанию к команде.Пока обработчик команд CanExecute возвращает false, т. Е. Соответствующий выбор не был введен / выбран, кнопка будет отключена и не будет реагировать на нажатие клавиши ввода пользователем.

0 голосов
/ 09 августа 2011

Поскольку я не мог узнать, какие другие элементы управления были у меня из пользовательского элемента управления, я решил пойти так:

Я сделал рекурсивную функцию для поиска первого родителя, используя FrameworkElement.Parent Имея родителя, я мог бы взглянуть на все элементы управления, которые он содержит. Как только я увидел кнопку, я должен был проверить, если IsDefault. Для этого я использовал VisualTreeHelper GetChildrenCount(DependencyObject obj_Parent) и GetChild(DependencyObject obj_Parent, int childIndex). Рекурсивность еще раз ...

Он работает очень хорошо, хотя для выполнения требуется больше кода.

...