在不粘贴整个模板的情况下更改 WPF 中 ComboBox 的背景颜色?

Change background colour of a ComboBox in WPF without pasting entire template?

我知道你可以右击,编辑模板 > 编辑副本,粘贴整个 ComboBox 模板然后更改几行,但是真的没有办法只用几行代码更改背景吗?

我可以用这段代码实现它,但是删除了下拉菜单 arrow/menu,这基本上使它变得毫无用处。

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Background" Value="Red" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter></ContentPresenter>
                </Border>
            </ControlTemplate>
         </Setter.Value>
    </Setter>
</Style>

恐怕您不能仅“覆盖”ControlTemplate 的一部分,并且鉴于定义 ComboBox 的默认 ControlTemplate 的方式,您不能简单地设置或 属性 或使用触发器创建派生样式以更改其背景颜色。这个有详细解释here.

您可以做的是在运行时以编程方式更改加载的模板元素的背景:

private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    ComboBox comboBox = (ComboBox)sender;
    ToggleButton toggleButton = comboBox.Template.FindName("toggleButton", comboBox) as ToggleButton;
    if (toggleButton != null)
    {
        Border border = toggleButton.Template.FindName("templateRoot", toggleButton) as Border;
        if (border != null)
            border.Background = Brushes.Yellow;
    }
}

XAML:

<ComboBox Loaded="ComboBox_Loaded">
    <ComboBoxItem Background="Yellow">1</ComboBoxItem>
    <ComboBoxItem Background="Yellow">2</ComboBoxItem>
    <ComboBoxItem Background="Yellow">3</ComboBoxItem>
</ComboBox>

另一种选择是将整个模板复制到您的 XAML 标记中并根据您的要求进行编辑。