Vous pouvez créer un nouveau modèle pour le bouton, puis fournir un menu contextuel dans l'arborescence visuelle du modèle. Quelque chose comme ceci:
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border>
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ContextMenu>
<ContextMenu Name="contextMenu">
<MenuItem Header="Here's a menu."/>
</ContextMenu>
</Border.ContextMenu>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Vous pouvez ensuite déclencher en utilisant la propriété IsPressed
du bouton et l'accrocher à l'aide d'un compositeur avec contextMenu comme TargetName
.
Ma vraie question est: à quoi sert-on? L'ouverture d'un menu contextuel sur un clic gauche va être intrinsèquement erronée, car les menus contextuels, par nature, se ferment lorsque l'on clique sur n'importe quel autre élément. Ce qui signifie que ce déclencheur, même s'il est correctement configuré, ouvrira et fermera le menu contextuel immédiatement. Je suis curieux de savoir pourquoi vous avez besoin de ce genre de comportement; il y a peut-être une meilleure façon de le faire que d'utiliser un menu contextuel.
Je cherche à construire quelque chose de similaire à Office ou IE où un bouton sur la barre d'outils, lorsqu'il est cliqué, montre un menu en dessous. Dans mon scénario, chaque élément de menu dans le menu est vérifiable afin qu'un utilisateur puisse rapidement activer et désactiver des éléments de la barre d'outils. – djcouchycouch
Ah. Pour ce scénario, un menu contextuel n'est certainement pas ce que vous cherchez. Ce que vous devez faire est de créer votre propre type de bouton qui possède sa propre collection d'éléments. Les éléments sont ensuite affichés dans un menu déroulant. La reformulation du contrôle de la zone de liste déroulante peut être un bon point de départ. – Charlie