我的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>
与showIfTrue和hideIfTrue一些转换器接受布尔值并返回可视性。Visible或Visibility。如果布尔值为真,则将分别折叠
您可以创建一个自定义分隔符样式,如下所示:
<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>