Создание пользовательского элемента управления, который представляет собой кнопку, которая также имеет Items и ItemsSource?
-
06-07-2019 - |
Вопрос
Я пытаюсь создать элемент управления SplitButton
, который использует ContextMenu
для отображения своих элементов. SplitButton
в настоящее время является производным от Button
. У меня есть PART_DropDownInitiator
- маленький значок, по которому пользователь нажимает, чтобы вызвать ContextMenu
для SplitButton
, чтобы показать его элементы.
Проблема в том, что я пытаюсь настроить ContextMenu
по умолчанию внутри шаблона
или стиля, таким образом Пользователь элемента управления не должен делать это самостоятельно. Сначала я решил, что пользователь просто установит свойство SplitButton
SplitButton.ContextMenu.Items
в xaml, но это не представляется возможным. Теперь я хотел бы добавить свойства Items
и ItemsSource
в SplitButton
, которые ContextMenu
внутри может быть привязан к нему. И пользователь должен просто установить свойство
Items
или ItemsSource
в xaml или code-behind в SplitButton
...
Но как свойства Items
, так и ItemsSource
происходят из ItemsControl
, что является проблемой, поскольку SplitButton Код> уже является производным от
Кнопка
. Так что я не уверен, что делать ... Есть идеи?
Решение
Если вы идете по пути наследования, вы должны вместо этого наследовать от HeaderedItemsControl, где ваш ControlTemplate по умолчанию помещает содержимое заголовка в качестве содержимого кнопки.
В результате вы также получаете Items / ItemsSource - единственное, что вам нужно разработать, это ваш ControlTemplate.
Наконец, рассмотрите возможность реализации части меню как всплывающее окно вместо ContextMenu. ContextMenu - это специализированный элемент пользовательского интерфейса (который обычно вызывается щелчком правой кнопки мыши). Для получения дополнительной информации см. ControlTemplate по умолчанию ComboBox в aero.normalcolor.xaml.