有人知道如何在WPF中更改组合框(ComboBox)在打开时的背景颜色吗?
有人知道如何在WPF中更改组合框(ComboBox)在打开时的背景颜色吗?
以下是一个稍微有些天真的方法:
<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
。然而,这里有两个问题:
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
控件的背景颜色,但这将产生期望的效果。ComboBox
模板对Background
属性的支持不太好,因为它会在各种情况下更改按钮部分的颜色。Aero主题的ComboBox
外观并不设计支持自定义背景颜色,因此您需要创建自己的自定义控件外观。好的,针对代码后端回答你的问题:
向你的组合框添加项目:
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的背景颜色。
首先,您需要获取Combobox的默认模板(如果需要详细信息,请参见下文)。然后,在第一个“ControlTemplate.Triggers”标记中放置此XAML:
<DataTrigger Binding="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Value="True">
<Setter Property="Background" TargetName="templateRoot" Value="Red"/>
</DataTrigger>
当下拉菜单打开时,您的组合框按钮将变为红色。
获取默认模板的方法:在Visual Studio 2015中,以设计模式查看您的页面。然后,右键单击组合框,选择“编辑模板->编辑副本”。这将为您生成默认模板。