我有MenuItem
从ItemsSource
- 属性动态创建子菜单项。
对于分组,我在菜单中有分隔符。通过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>
答案 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>