有谁知道,
如何在WPF中单击(ComboBox打开)时更改Combobox背景颜色?
答案 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
。但是,这有两个问题:
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>
严格来说,这实际上是改变了下拉列表中显示的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中,以设计模式查看页面。然后,右键单击组合框,并选择“编辑模板 - >编辑副本”。这将为您生成默认模板。