C# 上下文菜单背景颜色

C# 上下文菜单背景颜色,c#,wpf,user-interface,C#,Wpf,User Interface,我尝试在XAML中创建上下文菜单时遇到了一些问题。它应该相当简单,只是一个菜单项列表,偶尔使用分隔符 我已经能够正确地安排它,所有的项目都在正确的位置上,现在我开始设计它的样式和主题。我们通过公开大量在应用程序级别交换的命名笔刷来设置主题,因此在我的contextmenu、menuitem和separator控件样式中,我将这些名称绑定为动态资源。到目前为止,所有这些都是bog标准 我看到的问题是,对于我的分隔符,我在上下文菜单的左侧有一大块空间,它没有显示与菜单其余部分相同的背景,这在视觉上非

我尝试在XAML中创建上下文菜单时遇到了一些问题。它应该相当简单,只是一个菜单项列表,偶尔使用分隔符

我已经能够正确地安排它,所有的项目都在正确的位置上,现在我开始设计它的样式和主题。我们通过公开大量在应用程序级别交换的命名笔刷来设置主题,因此在我的contextmenu、menuitem和separator控件样式中,我将这些名称绑定为动态资源。到目前为止,所有这些都是bog标准

我看到的问题是,对于我的分隔符,我在上下文菜单的左侧有一大块空间,它没有显示与菜单其余部分相同的背景,这在视觉上非常分散注意力。你可以看到一个例子,想象它如何在我们的黑暗主题变得更糟

以我们的黑色风格:

以下是我用于contextmenu和分隔符的样式:

<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,我不知道如何删除它。有人见过这个吗

很好,先生,你应该能够完成你想要的行为

默认样式似乎与以下内容类似:

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}"
       TargetType="{x:Type Separator}">
    <Setter Property="MinHeight" Value="2"/>
    <Setter Property="Margin" Value="2,4,2,3"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Separator}">
                <theme:ClassicBorderDecorator BorderStyle="HorizontalLine"
                                              BorderBrush="{x:Static theme:ClassicBorderDecorator.ClassicBorderBrush}"
                                              BorderThickness="1"/>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


您可以通过ClassicByOrderBrush的Background属性引发黑客攻击。(TemplateBinding?

请看@sll,您认为我可以用一些使用我的主题颜色作为边框属性的内容覆盖contextmenu的ControlTemplate,如该示例所示,这可能会修复它?@ChesterHusk从我在线看到的内容,看起来你必须编辑模板才能去掉这些空间。你们都帮了大忙。我终于开始修补默认情况下在Blend中生成的控件模板,以获得所需的背景行为。