Création d'un contrôle personnalisé qui est un bouton qui a également un élément et un élément de source?

StackOverflow https://stackoverflow.com/questions/1007958

  •  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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top