在菜单项WPF xaml中创建分隔符



我的xaml如下所示:我有一个可观察的菜单集合(称为Menulist),它又由一个名为MenuItems的菜单项集合组成,我如何在xaml

中创建分隔符样式
  <Menu Name="menu" DockPanel.Dock="Top" ItemsSource="{Binding MenuList}">
         <Menu.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=MenuItems}">
                <HierarchicalDataTemplate.ItemContainerStyle>
                    <Style TargetType="MenuItem">
                        <Setter Property="Command" Value="{Binding MenuClick}" />
                        <Setter Property="IsCheckable" Value="{Binding Checkable}" /> 
                    </Style>
                </HierarchicalDataTemplate.ItemContainerStyle>
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding ImageSource}" />
                    <Label Content="{Binding Name}"/>
               </StackPanel>
            </HierarchicalDataTemplate>            
        </Menu.ItemTemplate>
       </Menu>

可能是这种hack(未测试):

<Menu Name="menu" DockPanel.Dock="Top" ItemsSource="{Binding MenuList}">
 <Menu.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=MenuItems}">
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="MenuItem">
                <Setter Property="Command" Value="{Binding MenuClick}" />
                <Setter Property="IsCheckable" Value="{Binding Checkable}" /> 
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
        <StackPanel Orientation="Horizontal" Visibility="{Binding IsSeparator,Converter=hideIfTrue}">
            <Image Source="{Binding ImageSource}" />
            <Label Content="{Binding Name}"/>
       </StackPanel>
       <Separator Visibility="{Binding IsSeparator,Converter=showIfTrue}" />
    </HierarchicalDataTemplate>            
  </Menu.ItemTemplate>
</Menu>

showIfTruehideIfTrue一些转换器接受布尔值并返回可视性。VisibleVisibility。如果布尔值为真,则将分别折叠

您可以创建一个自定义分隔符样式,如下所示:

 <Style x:Key="MySeparatorStyle" TargetType="{x:Type Separator}">
        <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
        <Setter Property="Margin" Value="0,2,0,2"/>
        <Setter Property="Focusable" Value="false"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Separator}">
                    <Border 
                        BorderBrush="{TemplateBinding BorderBrush}" 
                        BorderThickness="{TemplateBinding BorderThickness}" 
                        Background="{TemplateBinding Background}" 
                        Height="1" 
                        SnapsToDevicePixels="true"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

使用。

 <Menu Name="menu" DockPanel.Dock="Top" ItemsSource="{Binding MenuList}">
         <Menu.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=MenuItems}">
               .......
            </HierarchicalDataTemplate>            
              <Separator Style={StaticResource MySeparatorStyle}" />
        </Menu.ItemTemplate>
       </Menu>

最新更新