如何在WPF中更改组合框下拉列表展开时的背景颜色?

7

有人知道如何在WPF中更改组合框(ComboBox)在打开时的背景颜色吗?


1
你能告诉我们你正在使用哪种语言或框架吗? - Dominic
什么编程语言? - spajce
你好,这是WPF (.Net)。 - Nimesh
当你说“Clicked(ComboBox is Open)”时,我假设你的意思是combobox的下拉菜单已经打开了?(这并不一定与被点击有关。你可以通过Tab键将键盘焦点移动到ComboBox中,然后输入F4来打开它。)但如果你的意思不是指下拉菜单,请澄清一下。 - Ian Griffiths
3个回答

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属性只影响按钮本身的外观,而不是下拉列表。您实际上想要做的可能是更改下拉部分的背景颜色。
如果您需要的是第二种情况,请使用以下方法:
<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

好的,针对代码后端回答你的问题:

向你的组合框添加项目:

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的背景颜色。


0

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

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

当下拉菜单打开时,您的组合框按钮将变为红色。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接