我想为我的应用程序中的所有上下文菜单创建一个样式。这种样式将允许我在上下文菜单中添加标题/标题。我现在使用的风格如下
<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>
我希望我可以将此标签用作所有上下文菜单的可绑定标题/标题。我遇到的问题是我不知道如何使这个标签可绑定,以便每个上下文菜单都可以有不同的标题/标题。该解决方案还必须尽可能自包含。我不想让每个使用过上下文菜单的人都必须添加多行来启用此功能,即我希望标题是可选的,而不是每个菜单上的要求,所以如果有触发器或其他东西会很棒如果未设置,可能会隐藏标题
实现这一目标并使其尽可能可重用的最佳/最干净的方法是什么?