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

2024-05-10

我有一个MenuItem从动态创建其子菜单项ItemsSource-财产。

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

这工作正常,但是分隔符的光学样式与放置在菜单的项目集合中的其他分隔符不同。

有没有办法改变分隔符的外观,使其看起来与“正常”菜单项分隔符相同?

这是我使用的代码:

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

在 System.Resources 中声明了一个 StyleMenuItem.SeparatorStyleKey http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.separatorstylekey.aspx作为钥匙。父 MenuItem 通常会为 Separator 类型的子项设置样式,但由于您的是 MenuItem,因此不会,因此您必须手动执行此操作:

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

您可能还想阅读 Bea Stollnitz 的博客文章“如何在数据绑定的 MenuItem 中插入 Separator 对象?” http://bea.stollnitz.com/blog/?p=23另一种方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVVM 中动态创建 MenuItem-Separator 的 WPF 光学样式 的相关文章

随机推荐