我想为我的应用中的所有上下文菜单创建一个样式。这种样式允许我在上下文菜单中添加标题/标题。我现在使用的风格如下
<Style x:Uid="someStyle" TargetType="{x:Type ContextMenu}">
<Setter x:Uid="Setter_240" Property="Background" Value="{DynamicResource someBrush}" />
<Setter x:Uid="Setter_241" Property="BorderBrush" Value="{DynamicResource someBorderBrush}" />
<Setter x:Uid="Setter_242" Property="SnapsToDevicePixels" Value="True" />
<Setter x:Uid="Setter_243" Property="Template">
<Setter.Value>
<ControlTemplate x:Uid="ControlTemplate_30" TargetType="{x:Type ContextMenu}">
<Grid x:Uid="Grid_27">
<Border x:Uid="Border_25" Margin="1" x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" />
<StackPanel x:Uid="StackPanel_4" Background="{TemplateBinding Background}" IsItemsHost="True" ClipToBounds="True" Orientation="Vertical" />
</Grid>
<ControlTemplate.Triggers>
<Trigger x:Uid="Trigger_76" Property="IsEnabled" Value="False">
<Setter x:Uid="Setter_244" Property="Background" Value="{DynamicResource someBrush}" TargetName="Border" />
<Setter x:Uid="Setter_245" Property="BorderBrush" Value="{DynamicResource someBrush}" TargetName="Border" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这种风格对我来说很合适,但无法添加标题/标题。我最初的想法是在这里放置一个虚拟标签
<Grid x:Uid="Grid_27">
<Border x:Uid="Border_25" Margin="1" x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" />
<Label Content {bind some way to allow the user to set it}>
<Label.Triggers>
<some way to hide the header if not set/>
<Label.Triggers>
</Label>
<StackPanel x:Uid="StackPanel_4" Background="{TemplateBinding Background}" IsItemsHost="True" ClipToBounds="True" Orientation="Vertical" />
</Grid>
我希望我可以将此标签用作所有上下文菜单的可绑定标题/标题。我遇到的问题是我不知道如何使这个标签可绑定,以便每个上下文菜单可以有不同的标题/标题。该解决方案也必须尽可能自包含。我不想让每个使用过上下文菜单的人都必须添加多行才能启用此功能,即我希望标题是可选的而不是每个菜单上的要求所以如果有触发器或其他东西会很好如果未设置标题,可能会隐藏标题
实现这一目标的最佳/最干净方法是什么,并使其尽可能重复使用?
答案 0 :(得分:1)
在你的风格中只是涓滴结束:
<Grid x:Uid="Grid_27" DataContext={Binding}>
<Border .../>
<Label Content="{Binding MenuTitle}"
Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibility}}"/>
...the rest of your style...
</Grid>
在使用中,提供数据上下文:
<MenuItem DataContext="{Binding SomeViewModel.Menu1}"
Style={StaticResource yourstyle}>
...
其中Menu1是具有“MenuTitle”和“IsVisible”属性类型的属性