Я хочу спросить о деталях реализации combobox в wpf (или silverlight) - PullRequest
1 голос
/ 01 января 2011

Сейчас я работаю над пользовательским элементом управления в wpf. Я использовал Combobox в качестве родителя. Интересно, как мой пользовательский Combobox работает как его родитель? Как я могу щелкнуть любую часть моего экрана, и раскрывающаяся часть моего выпадающего списка может быть закрыта ... Я пробовал много способов, но ни один из них не работает должным образом.

Может кто-нибудь дать какие-нибудь статьи или что-то еще?

1 Ответ

1 голос
/ 01 января 2011

Вот стандартные шаблоны управления ComboBox: WPF и Silverlight .

В примере WPF Popup и ToggleButton (стрелка справа) связаны со свойством IsDropDownOpen:

<Popup IsOpen="{TemplateBinding IsDropDownOpen}" ...

<ToggleButton IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" ...

Класс Popup имеет свойство StaysOpen, которое не указано в стандартном шаблоне ComboBox и имеет значение по умолчанию true. Из этого следует, что во внутренней реализации ComboBox есть подписка на событие LostFocus, которое устанавливает IsDropDownOpen=false каждый раз, когда элемент управления теряет фокус.

Silverlight не имеет привязок в xaml, но вы найдете ту же последовательность, если откроете сборку в .Net Reflector.

...