2010-09-09 14 views
7

Tengo un MenuItem que crea sus elementos de submenú dinámicamente desde ItemsSource -property.Estilo óptico WPF de MenuItem-Separator creado dinámicamente en MVVM

Para agrupar, tengo Separadores en el menú. El separador se crea para cada entrada nula en Items-source-collection por una ControlTemplate del MenuItem.ItemContainerStyle.

Esto funciona bien, sin embargo, el separador no tiene el mismo estilo óptico que los otros separadores que se colocan en una colección de elementos de un menú.

¿Hay alguna manera de cambiar el aspecto del separador para que se vea igual a los separadores de elementos de menú "normales"?

Este es el código que utilizo:

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

Respuesta

15

hay un estilo que se declara en System.Resources con MenuItem.SeparatorStyleKey como la clave. El padre Menultem normalmente establece el estilo de los niños de tipo separador, pero dado que la suya es una Menultem, no lo hará, por lo que tendrá que hacerlo de forma manual:

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

También puede leer el blog de Bea Stollnitz entrada "How do I insert Separator objects in a data bound MenuItem?" para otro enfoque.

0

trate de envolver el Separador en un Menultem

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

Gracias por la respuesta. Es una buena idea, pero lamentablemente no ayuda. El separador se ve igual pero tiene como niño un elemento de menú que se puede seleccionar (lo que hace que el separador pueda seleccionarse al final, si no está desactivado). – HCL