13 votes

Personnalisation du menu contextuel en WPF

J'ai un projet ici où je dois personnaliser le menu contextuel dans mon application WPF, dans laquelle un bouton serait placé en bas de tous les éléments du menu.

Cependant, si je devais ajouter le bouton via le XAML, il apparaîtrait comme un autre élément dans la collection du menu contextuel et le survol de la souris agirait sur lui.

J'aimerais que le menu contextuel soit ajusté à un style de type grille où je pourrais personnaliser le style en dessous.

Avez-vous une idée de comment je peux y parvenir (de préférence en XAML) ?

30voto

Ben Wilde Points 640

C'est en fait assez simple dans le XAML. Il suffit de le définir sous l'élément pour lequel vous voulez avoir le menu contextuel.

7voto

Chrisjan Lodewyks Points 1122

Pour styliser votre élément de menu avec le bouton dans l'élément, vous pouvez utiliser le code suivant :

Note - Ajouter des éléments à l'Header le gardera dans le même MenuItem, mais s'ils sont ajoutés uniquement à MenuItem, ils seront considérés comme un nouveau MenuItem.

Ceci sera le ContextMenu résultant :

enter image description here

À partir de là, vous pouvez styliser la MenuItem ou le Button etc.

J'espère que cela vous aidera !

4voto

Drew Noakes Points 69288

Vous pouvez commencer avec le style/modèle d'exemple (à partir de ici) pour ContextMenu et l'ajuster à vos besoins.

  <Setter Property="SnapsToDevicePixels" Value="True" />
  <Setter Property="OverridesDefaultStyle" Value="True" />
  <Setter Property="Grid.IsSharedSizeScope" Value="true" />
  <Setter Property="HasDropShadow" Value="True" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ContextMenu}">
        <Border x:Name="Border"
                Background="{StaticResource MenuPopupBrush}"
                BorderThickness="1">
          <Border.BorderBrush>
            <SolidColorBrush Color="{StaticResource BorderMediumColor}" />
          </Border.BorderBrush>
          <StackPanel IsItemsHost="True"
                      KeyboardNavigation.DirectionalNavigation="Cycle" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="HasDropShadow" Value="true">
            <Setter TargetName="Border" Property="Padding" Value="0,3,0,3" />
            <Setter TargetName="Border" Property="CornerRadius" Value="4" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X