2010-09-09 11 views
7

Ho uno MenuItem che crea dinamicamente le sue voci di sottomenu dalla proprietà ItemsSource.Stile ottico WPF di MenuItem-Separator dinamicamente creato in MVVM

Per il raggruppamento, nel menu sono presenti Separatori. Il separatore viene creato per ogni voce nulla nella collezione ItemsSource da un ControlTemplate dello MenuItem.ItemContainerStyle.

Questo funziona correttamente, tuttavia il separatore non ha lo stesso stile ottico degli altri separatori che sono inseriti in una raccolta di elementi di un menu.

C'è un modo per modificare l'aspetto del separatore in modo che assomigli ai "normali" menu-elementi-separatori?

ecco il codice che uso:

<MenuItem.ItemContainerStyle> 
    <Style TargetType="MenuItem"> 
    <Setter Property="Header" Value="{Binding Title}"/> 
    <Setter Property="Command" Value="{Binding Command}"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding }" Value="{x:Null}"> 
      <Setter Property="Template" > 
       <Setter.Value> 
        <ControlTemplate> 
         <Separator /> <!-- THIS SEPARATOR IS NOT SHOWN AS COMMON MENUITEM-SEPARATORS ARE --> 
        </ControlTemplate>           
       </Setter.Value> 
      </Setter> 
     </DataTrigger>        
    </Style.Triggers> 
    </Style> 
</MenuItem.ItemContainerStyle> 

risposta

15

c'è uno stile che è dichiarato in System.Resources con MenuItem.SeparatorStyleKey come la chiave. Il genitore MenuItem imposta normalmente lo stile sui bambini di tipo di separatore, ma dal momento che il vostro è un MenuItem, non lo farà, in modo da avere a che fare manualmente:

<Separator Style="{StaticResource {x:Static MenuItem.SeparatorStyleKey}}" /> 

Si consiglia inoltre di leggere il blog di Bea Stollnitz voce "How do I insert Separator objects in a data bound MenuItem?" per un altro approccio.

0

Provare avvolgendo il separatore in un MenuItem

<ControlTemplate> 
    <MenuItem> 
    <MenuItem.Header> 
     <Separator /> 
    </MenuItem.Header> 
    </MenuItem> 
</ControlTemplate> 
+0

Grazie per la risposta. È una buona idea, ma purtroppo non aiuta. Il separatore sembra uguale ma ha come elemento aggiuntivo un MenuItem che è selezionabile (ciò che rende il separatore selezionabile alla fine, se non disabilitato). – HCL