C# Wpf中菜单项的选择性样式

C# Wpf中菜单项的选择性样式,c#,wpf,xaml,wpf-controls,wpf-style,C#,Wpf,Xaml,Wpf Controls,Wpf Style,我有一个菜单项,标题下有几个动态列表。我想设置来自CollectionContainer项的项的样式,但不设置已经属于MenuItem类型的标题的样式。我以前使用DataTemplate进行此操作,但遇到了一个问题 如何仅设置这些特定列表的样式?一种解决方案是为菜单项设置默认样式,然后由生成的项使用。然后,对于未生成的项,可以显式地将样式设置为其他样式 它变得有点冗长,但允许混合使用动态和非动态项: <Menu DockPanel.Dock="Top"> <Me

我有一个
菜单项
,标题下有几个动态列表。我想设置来自
CollectionContainer
项的项的样式,但不设置已经属于
MenuItem
类型的标题的样式。我以前使用
DataTemplate
进行此操作,但遇到了一个问题



如何仅设置这些特定列表的样式?

一种解决方案是为菜单项设置默认样式,然后由生成的项使用。然后,对于未生成的项,可以显式地将样式设置为其他样式


它变得有点冗长,但允许混合使用动态和非动态项:

<Menu DockPanel.Dock="Top">
  <Menu.ItemTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}">
      <TextBlock Text="{Binding}"/>
    </HierarchicalDataTemplate>
  </Menu.ItemTemplate>
  <Menu.ItemsSource>
    <CompositeCollection>
      <MenuItem Header="123" Style="{StaticResource NormalMenuItem}">
        <MenuItem Header="Beta1" Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Beta2"  Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Beta3"  Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Close" Command="Close" CommandTarget="{Binding ElementName=Window}" />
      </MenuItem>
      <CollectionContainer Collection="{Binding Source={StaticResource Items}}" />
    </CompositeCollection>
  </Menu.ItemsSource>
</Menu>


什么是风格?您的意思是要对这些元素应用特定的样式吗?是的,我希望根据对象设置这些项目的标题和复选框,以及其他一些设置。对于相同问题,我的解决方案是在
菜单项
s上指定
Tag=“·”
,而不是在集合中,然后在
ItemContainerStyle
中,在应用样式之前,我在
Tag
上指定一个等于
{x:Null}
的触发器。这样做的好处是,您不会在
MenuItem
之外使用
CompsiteCollection
更改
MenuItem
。现在我要寻找的是反转从源代码生成的
MenuItem
s上要设置的
Tag
值。
<!-- this will be the style of each generated MenuItem -->
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
  <Setter Property="Header" Value="{Binding Path=Text, StringFormat=Example {0}}" />
  <Setter Property="Command" Value="{Binding Path=Command}" />
  <Setter Property="Icon" Value="{StaticResource TheImage}" />
</Style>
<Menu DockPanel.Dock="Top">
  <Menu.ItemTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}">
      <TextBlock Text="{Binding}"/>
    </HierarchicalDataTemplate>
  </Menu.ItemTemplate>
  <Menu.ItemsSource>
    <CompositeCollection>
      <MenuItem Header="123" Style="{StaticResource NormalMenuItem}">
        <MenuItem Header="Beta1" Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Beta2"  Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Beta3"  Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Close" Command="Close" CommandTarget="{Binding ElementName=Window}" />
      </MenuItem>
      <CollectionContainer Collection="{Binding Source={StaticResource Items}}" />
    </CompositeCollection>
  </Menu.ItemsSource>
</Menu>