2013-09-03 16 views
5

Wenn das Kontextmenü in xaml "fest codiert" ist, können Untermenüs einfach hinzugefügt werden. Zum Beispiel:WPF-Untermenü für das Kontextmenü

<ContextMenu> 
    <MenuItem Header="Comm1" Command="{Binding Blabla1}"> 
     <MenuItem Header="SubComm1" Command="{Binding Blabla2}"></MenuItem> 
    </MenuItem> 
    <MenuItem Command="Comm2"></MenuItem> 
    <MenuItem Command="Comm3"></MenuItem> 
</ContextMenu> 

Dies bedeutet, dass der ContextMenu drei Elemente hat (Comm1, Comm2 und Comm3) und Comm1 hat Untermenü SubComm1.

Ich habe meine ContextMenu etwas flexibilisiert:

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter> 
      <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 

Grundsätzlich ich eine beliebige Anzahl von Elementen in ContextMenu haben kann, und jedes Element kann eine beliebige Kommando hat. Wie kann ich dem ContextMenu-Element ein Untermenü hinzufügen?

+0

Binden Sie Ihre Baumdatenstruktur an ItemsSource und verwenden Sie Converter, der die Daten in MenuItems konvertiert. –

Antwort

10

Sie können MenuItem.ItemsSource für die verschachtelte Auflistung festlegen. Dies erzeugt das Untermenü für jedes Menüelement. Dazu wird das Modell Ihrer MenuItem sichern sollte submenuitems Sammlung darin

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="ItemsSource" Value="{Binding ContextMenuSubItems}"></Setter> 
      <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter> 
      <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 

Ebenso können Sie die MenuItem.ItemContainerStyle und MenuItem.ItemTemplate stellen Sie Ihr submenuitems stylen.

Verwandte Themen