代码之家  ›  专栏  ›  技术社区  ›  HCL

MVVM中动态创建MenuItem分隔符的WPF光学样式

  •  7
  • HCL  · 技术社区  · 15 年前

    我有一个 MenuItem ItemsSource

    对于分组,我在菜单中有分隔符。分隔符是由的ControlTemplate为ItemsSource集合中的每个空条目创建的 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>
    
    2 回复  |  直到 15 年前
        1
  •  15
  •   skst    13 年前

    在中声明了一个样式系统资源具有 MenuItem.SeparatorStyleKey 作为关键。父MenuItem通常在Separator类型的子项上设置样式,但由于您的是MenuItem,因此它不会设置样式,因此您必须手动执行此操作:

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

    你可能还想读一下Bea Stollnitz的博客 "How do I insert Separator objects in a data bound MenuItem?" 另一种方法。

        2
  •  0
  •   rudigrobler    15 年前

    尝试将分隔符包装在菜单项中

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