我在尝试在XAML中创建的上下文菜单有点麻烦。它应该很简单,只是一个菜单项列表,偶尔也有分隔符。上下文菜单背景着色
我已经能够正确地安排它,所有的项目都在正确的位置,现在我正在进行造型和主题化。我们通过公开一些在应用程序级别换出的命名笔刷来主题化,所以在我的contextmenu,menuitem和separator控件的样式中,我将这些名称绑定为动态资源。到目前为止,所有这些都是沼气标准。
我看到的问题是,对于我的分隔符,我在上下文菜单的左侧有一大块空间,它没有显示与菜单其余部分相同的背景,这非常不直观。你可以看到一个例子,并想象它在我们的黑暗主题中变得更糟!
而在我们的黑暗风格:
这里是我使用的文本菜单样式和分离器:
<Style TargetType="{x:Type ContextMenu}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource HighlightBrush}"/>
</Trigger>
<DataTrigger Binding="{Binding ContextMenu.IsOpen,RelativeSource={RelativeSource Mode=Self}}" Value="True">
<Setter Property="Background" Value="{DynamicResource HighlightBrush}"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="Background" Value="{DynamicResource BackgroundLight}" />
<Setter Property="Foreground" Value="{DynamicResource ForegroundText}" />
<Setter Property="BorderThickness" Value="1" />
</Style>
<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Separator}">
<Grid Margin="0,6,0,4" SnapsToDevicePixels="true">
<Rectangle Margin="30,0,1,1" Height="1" Fill="{DynamicResource BackgroundLight}"/>
<Rectangle Margin="30,1,1,0" Height="1" Fill="{DynamicResource ContextMenuSeparator}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我不知道这件事是从哪里来的,当我窥探应用程序的视觉树时,我只看到一个带有白色帆布的ContentPresenter,我不知道如何删除。任何人见过这个?
请参阅[菜单样式和模板](http://msdn.microsoft.com/en-us/library/ms752296.aspx) – sll
@sll,所以你认为我可以覆盖contextmenu的ControlTemplate一些使用我的主题颜色的边界属性,如该示例中所示,这可能会解决它? –
@ChesterHusk从我在网上可以看到的,看起来你必须编辑模板来摆脱那个空间。 – Rachel