Пользовательский элемент управления WPF ComboBox

#wpf #controls

#wpf #элементы управления

Вопрос:

Я использую выпадающий список в своем приложении WPF. В выпадающем списке есть проблема с прокруткой, которая была введена в .NET Framework. Я поискал в Интернете решение и обнаружил, что мне нужно создать новый выпадающий список, который переопределяет OnApplyTemplate() и GetVisualChild((ссылка на DependencyObject))) и вводит некоторую новую логику для устранения проблемы в этих методах.

Смотрите: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/0a571c75-4976-4c94-a59e-b085679a5d08 /

Мой вопрос просто в том, какой тип элемента управления, по вашему мнению, я должен создать?

  1. Пользовательский элемент управления
  2. Пользовательский элемент управления
  3. Унаследованный от класса CoboBox — просто создайте новый класс, который является производным от ComboBox, и добавьте методы, описанные выше?

Ответ №1:

Ваш лучший выбор — # 3, что и делается по предоставленной вами ссылке. Для # 1 вам пришлось бы дублировать весь код управления со списком, и я не уверен, что вы могли бы сделать это с # 2.

Комментарии:

1. Отлично. Спасибо за это. Я рад использовать # 3. Хотя, я немного запутался в # 1? Вы говорите, что управляющий код необходимо дублировать. Означает ли это, что мне нужно создать переопределенные DependencyProperty свойства для каждого из свойств, представленных в выпадающем списке, или вы имеете в виду, что мне нужно каким-то образом захватить исходный код из выпадающего списка и реализовать в моем новом пользовательском элементе управления?

2. @Finbar — Да, вам нужно будет дублировать весь код, который есть в классе ComboBox, затем настроить его, чтобы устранить проблему, которую вы описываете. По крайней мере, я предполагаю, что это то, что вы имели в виду под # 1 (т. Е. Элемент управления MyComboBox, который работает точно так же, как ComboBox, но устраняет вашу проблему).

3. ДА. Вот что я имею в виду. Просто для подтверждения — если вы не возражаете. Вы имеете в виду «Дублировать, переопределяя каждое свойство явно» или «Дублировать, получая исходный код и переопределяя копирование / вставку»?

4. @Finbar — Вам пришлось бы получить исходный код и переопределить его. Вы не можете просто «переопределить каждое свойство явно», чтобы получить ту же функциональность.