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

时间:2013-02-12 05:20:09

标签: wpf mvvm combobox background-color

有谁知道,

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

3 个答案:

答案 0 :(得分: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>

最初,这会将Background属性设置为Green,但会在下拉列表显示时将其安排到Red。但是,这有两个问题:

  1. 在某些Windows主题(例如,Vista和Windows 7中使用的Aero主题)中,绿色背景被主题用于指示已按下下拉按钮的蓝色颜色遮挡。因此按钮会在淡入青色之前暂时变为绿色。
  2. ComboBox.Background属性仅影响按钮本身的外观,而不影响下拉列表。您实际想要做的就是更改弹出部件的背景颜色。
  3. 如果2是你想要的,这就是诀窍:

    <ComboBox
      ItemsSource="{x:Static Fonts.SystemFontFamilies}"
      Width="100"      >
      <ComboBox.Resources>
        <Style TargetType="ComboBoxItem">
           <Setter Property="Background" Value="Orange" />
        </Style>
      </ComboBox.Resources>
    </ComboBox>
    

    严格来说,这实际上是改变了下拉列表中显示的ComboBoxItem控件的背景颜色,但这会产生预期效果。

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

答案 1 :(得分:0)

好的,回答你背后代码的问题:

将项目添加到您的组合框:

foreach (String tag in tags)
{
    ComboBoxItem item = new ComboBoxItem();
    item.Content = tag;
    cbTags.Items.Add(item);
}

然后你可以修改项目背景颜色:

((ComboBox)o).Background = GetBrushByRGB(r, g, b);
foreach (ComboBoxItem item in ((ComboBox)o).Items)
{
    item.Background = GetBrushByRGB(r, g, b);
}

所以基本上你需要改变ComboBoxItem的背景色。

答案 2 :(得分:0)

首先,您需要获取Combobox的默认模板(如果需要,请参阅下面的详细信息)。然后,将此XAML放在第一个“ControlTemplate.Triggers”标记内:

<DataTrigger Binding="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Value="True">
    <Setter Property="Background" TargetName="templateRoot" Value="Red"/>
</DataTrigger>

下拉列表打开时,您的组合框按钮将显示为红色。

获取默认模板:在Visual Studio 2015中,以设计模式查看页面。然后,右键单击组合框,并选择“编辑模板 - >编辑副本”。这将为您生成默认模板。