2010-09-09 3 views
7

J'ai un MenuItem qui crée ses sous-éléments de menu de façon dynamique à partir de la propriété ItemsSource.Style optique WPF de MenuItem-Separator créé dynamiquement dans MVVM

Pour le regroupement, j'ai des séparateurs dans le menu. Le séparateur est créé pour chaque entrée null dans la collection ItemsSource par un ControlTemplate du MenuItem.ItemContainerStyle.

Cela fonctionne bien, mais le séparateur n'a pas le même style optique que les autres séparateurs qui sont placés dans la collection Items d'un menu.

Existe-t-il un moyen de modifier l'aspect du séparateur de sorte qu'il semble égal aux séparateurs d'éléments de menu "normaux"?

Voici le code que j'utilise:

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

Répondre

15

Il y a un style qui est déclaré dans System.Resources avec MenuItem.SeparatorStyleKey comme la clé. Le parent MenuItem définit normalement le style sur les enfants de type séparateur, mais étant donné que le vôtre est un MenuItem, il ne sera pas, alors vous devrez le faire manuellement:

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

Vous pouvez également lire le blog de Bea Stollnitz entrée "How do I insert Separator objects in a data bound MenuItem?" pour une autre approche.

0

Essayez d'envelopper la Seperator dans un MenuItem

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

Merci pour la réponse. C'est une bonne idée mais malheureusement cela n'aide pas. Le séparateur a l'air égal mais possède en plus un objet MenuItem qui est sélectionnable (ce qui rend le séparateur sélectionnable à la fin, s'il n'est pas désactivé). – HCL