首页 > 解决方案 > WPF 分隔符背景颜色保持灰色

问题描述

我有一个带有分隔符的 WPF 菜单,我希望它是黑色和 1 像素宽。但是,分隔符似乎有一个内置的 30 像素宽的缓冲区空间,我无法更改其颜色。在下面的示例中,我将分隔符设置为 50 像素宽——您可以看到前 30 像素没有反映正确的背景颜色。很烦人!我错过了什么?

在此处输入图像描述

这是 XAML:

        <Menu DockPanel.Dock="Top" FontSize="45" Height="62" Name="Menu">
            <MenuItem Header="_Home" Name="HomeMenuItem" Click="HomeMenuItem_Click" Padding="10,0,10,0"></MenuItem>
            <Separator Width="50" Background="Black" Foreground="Black" BorderThickness="0" Margin="0" Padding="0"></Separator>
            <MenuItem Header="_Print" Name="PrintMenuItem" Click="PrintMenuItem_Click" Padding="10,0,10,0"></MenuItem>
            ...

标签: c#wpfseparator

解决方案


结果是菜单的 ControlTemplate 自动包含分隔符的边距。感谢Rowbear,我现在明白 ControlTemplate 会覆盖样式。然后解决方案是将自定义模板添加到 Application.Resources。(我确信在 Windows.Resources 等中这样做会很好)

    <Style x:Key="SeparatorStyle" TargetType="{x:Type Separator}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Separator}">
                    <Border Padding="0" Margin="0" BorderThickness="0" Background="#40000000"></Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

然后在主 XAML 窗口中引用自定义 ControlTemplate,如下所示:

<Separator Width="1" Style="{StaticResource SeparatorStyle}"></Separator>

推荐阅读