在MVVM中动态创建MenuItem-Separator的WPF光学样式

时间:2010-09-09 09:07:47

标签: wpf mvvm

我有MenuItemItemsSource - 属性动态创建子菜单项。

对于分组,我在菜单中有分隔符。通过MenuItem.ItemContainerStyle的ControlTemplate为ItemsSource集合中的每个空条目创建分隔符。

这样可以正常工作,但是分隔符与其他分隔符的光学样式不同,它们放在菜单的Items-collection中。

有没有办法改变分隔符的外观,使其看起来等于“普通”菜单项分隔符?

以下是我使用的代码:

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

2 个答案:

答案 0 :(得分:15)

在System.Resources中声明了一个以MenuItem.SeparatorStyleKey为键的Style。父MenuItem通常在Separator类型的子项上设置样式,但由于你的是MenuItem,它不会,所以你必须手动完成:

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

您可能还想阅读Bea Stollnitz的博客文章"How do I insert Separator objects in a data bound MenuItem?"以了解其他方法。

答案 1 :(得分:0)

尝试在MenuItem中包装Separator

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