如何在WPF中单击(ComboBox打开)时更改Combobox背景颜色?

Nim*_*esh 7 wpf combobox mvvm background-color

有谁知道,

如何在WPF中单击(ComboBox打开)时更改Combobox背景颜色?

Ian*_*ths 2

这是一个有点幼稚的方法:

<ComboBox
  ItemsSource="{x:Static Fonts.SystemFontFamilies}"
  Width="100"
  >
  <ComboBox.Style>
    <Style TargetType="ComboBox">
      <Setter Property="Background" Value="Green" />
      <Style.Triggers>
        <Trigger Property="IsDropDownOpen" Value="True">
          <Setter Property="Background" Value="Red" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </ComboBox.Style>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

最初,这将Background属性设置为,但安排它在下拉列表出现时Green转到。Red然而,这样做有两个问题:

  1. 在某些Windows 主题中(例如,Vista 和Windows 7 中使用的Aero 主题),绿色背景会被主题用来指示下拉菜单按钮已被按下的蓝色所遮盖。因此,该按钮会短暂变为绿色,然后逐渐变为青色。
  2. ComboBox.Background属性仅影响按钮本身的外观,而不影响下拉列表。您真正想要做的可能是更改弹出部分的背景颜色。

如果 2 是你想要的,这可以解决问题:

<ComboBox
  ItemsSource="{x:Static Fonts.SystemFontFamilies}"
  Width="100"      >
  <ComboBox.Resources>
    <Style TargetType="ComboBoxItem">
       <Setter Property="Background" Value="Orange" />
    </Style>
  </ComboBox.Resources>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

严格来说,这实际上是改变背景颜色ComboBoxItem严格来说,这实际上是更改下拉列表中显示的控件

但是,如果您想修复1,则需要自定义模板,因为内置模板ComboBox并没有真正为该属性提供很好的支持Background,因为它会在各种情况下更改按钮部分的颜色。Aero 主题的外观ComboBox实际上并不支持自定义背景颜色,因此您需要为控件创建自己的自定义外观。