2013-09-03 29 views
5

Se il menu di scelta rapida è "hardcoded" in xaml, è facile aggiungere sottomenu. Ad esempio:Sottomenu WPF per menu di scelta rapida

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

Ciò significa, che la ContextMenu ha tre elementi (Comm1, Comm2 e Comm3) e Comm1 ha sottomenu SubComm1.

Ho fatto il mio ContextMenu un po 'più flessibile:

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

Fondamentalmente io può avere qualsiasi numero di elementi in ContextMenu, e ogni elemento può avere qualsiasi comando. Come posso aggiungere un sottomenu all'elemento ContextMenu?

+0

Associare la struttura dati dell'albero a ItemsSource e utilizzare Convertitore che converte i dati in MenuItems. –

risposta

10

È possibile impostare MenuItem.ItemsSource nella raccolta nidificata. Questo genererà il sottomenu per qualsiasi menu. Per questo il modello appoggiando la vostra MenuItem dovrebbe avere raccolta submenuitems in esso

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

Allo stesso modo è possibile impostare il MenuItem.ItemContainerStyle e MenuItem.ItemTemplate per lo stile tuoi submenuitems.

Problemi correlati