Création d'un contrôle personnalisé qui est un bouton qui a également un élément et un élément de source?
-
06-07-2019 - |
Question
J'essaie de créer un contrôle SplitButton
qui utilise un ContextMenu
pour afficher ses éléments. Le SplitButton
est actuellement dérivé du Button
. J'ai un PART_DropDownInitiator
qui est la petite icône sur laquelle l'utilisateur clique pour afficher le ContextMenu
du SplitButton
afin d'afficher ses éléments.
Le problème est que j'essaie de configurer un ContextMenu
par défaut à l'intérieur du modèle
de SplitButton
, de cette façon l'utilisateur du contrôle n'a pas à le faire lui-même. Au début, je pensais qu'il suffisait à l'utilisateur de définir la propriété SplitButton.ContextMenu.Items
dans xaml, mais cela ne semble pas possible. J'aimerais maintenant ajouter les propriétés Items
et ItemsSource
au SplitButton
que le ContextMenu
dans SplitButton
peut être lié à celui-ci. Et l'utilisateur ne devrait plus avoir à définir la propriété Items
ou ItemsSource
dans xaml ou code-behind sur le SplitButton
...
Cependant, les propriétés Items
et ItemsSource
semblent provenir de ItemsControl
, ce qui pose un problème car le SplitButton
provient déjà du bouton
. Donc, je ne sais pas quoi faire ... Des idées?
La solution
Si vous choisissez la route d'héritage, vous devriez plutôt dériver de HeaderedItemsControl, où votre ControlTemplate par défaut place le contenu de l'en-tête en tant que contenu d'un bouton.
En conséquence, vous obtenez également Items / ItemsSource - la seule chose que vous devez développer est votre ControlTemplate.
Enfin, envisagez d'implémenter la portion de menu en tant que Popup au lieu d'un ContextMenu. Les ContextMenu sont un élément d'interface utilisateur spécifique (et généralement mis en place avec un clic droit). Pour plus d'informations, voir le ControlTemplate par défaut de ComboBox dans aero.normalcolor.xaml.