2017-05-26 2 views
0

Ich habe eine ContextMenu, in der ich ein Untermenü an eine Sammlung von benutzerdefinierten Objekten binde. Bei Klick bin das Senden ich einen Befehl mit dem gebundenen Objekt als Parameter:MenuItem anklickbarer Bereich

 <ContextMenu> 
      <MenuItem Header="Launch" ItemsSource="{Binding Profiles}"> 
       <MenuItem.ItemTemplate> 
        <DataTemplate> 
         <MenuItem Command="{Binding DataContext.LaunchProfileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}" 
            CommandParameter="{Binding}"> 
          <MenuItem.Style> 
           <Style TargetType="MenuItem"> 
            <Setter Property="Template"> 
             <Setter.Value> 
              <ControlTemplate TargetType="{x:Type MenuItem}"> 
               <local:ProfileView IconSize="24" NameFontSize="10"/> 
              </ControlTemplate> 
             </Setter.Value> 
            </Setter> 
           </Style> 
          </MenuItem.Style> 
         </MenuItem> 
        </DataTemplate> 
       </MenuItem.ItemTemplate> 
      </MenuItem> 
      <MenuItem Header="Exit" Command="{Binding ExitCommand}"/> 
     </ContextMenu> 

Das Problem ist, dass nicht die gesamte Fläche des MenuItem (eine pro jedes Element in ‚Profile‘ Sammlung) wird das gebundene Befehl auslösen. Nur rote Bereich wird der Befehl ausgelöst:

enter image description here

Ich habe versucht, ohne Erfolg die Padding und Margin Eigenschaften des MenuItem Stil zu ändern.

Wie kann ich erreichen, in der Lage zu sein, überall in MenuItem klicken und in der Lage sein, den gebundenen Befehl auszulösen?

Hinweis: Der rote Bereich entspricht meiner benutzerdefinierten Ansicht: ProfileView. Die Ränder dieser Ansicht sind auf 0 gesetzt.

Antwort

1

Sie setzen einen Menüeintrag in einen anderen Menüeintrag. Du musst das nicht tun. Legen Sie die Eigenschaften auf den Abschuss Untermenü Kind Menüpunkte mit ItemContainerStyle:

<ContextMenu> 
    <MenuItem Header="Launch" ItemsSource="{Binding Profiles}"> 
     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
       <Setter 
        Property="Command" 
        Value="{Binding DataContext.LaunchProfileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}" 
        /> 
       <Setter 
        Property="CommandParameter" 
        Value="{Binding}" 
        /> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate TargetType="{x:Type MenuItem}"> 
          <local:ProfileView IconSize="24" NameFontSize="10"/> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
    <MenuItem Header="Exit" Command="{Binding ExitCommand}"/> 
</ContextMenu> 
+0

Hervorhebungen gestoppt haben auf MenuItems arbeiten, kann es durch die Verwendung als Templat Kontrollen (Mahapps) verursacht werden? – Sturm

+0

@Sturm Rechts behandelt die Steuerelementvorlage das, und Sie haben die Steuerelementvorlage ersetzt. Ich habe meine Version aktualisiert, um stattdessen HeaderTemplate zu verwenden. Wenn Sie die vorhandene Steuerelementvorlage vollständig entfernen möchten, müssen Sie Ihrem neuen ControlTemplate einige Trigger zuweisen, um die Hervorhebung usw. zu behandeln. –

+0

Ich konnte dies lösen, indem ich einen Stiltrigger hinzufügte: ' 'und dann setze ich mein Steuerelement in ein' Grid' mit 'Background =" {TemplateBinding Background} "' – Sturm