WPF组合框样式和触发器无法工作

3

我有一个下拉列表:

var cmbLogin = new ComboBox()
{
    Width = 200,
    Height = 50,
    Margin = new Thickness(20),
    HorizontalContentAlignment = HorizontalAlignment.Center,
    Background = Brushes.Transparent,
    Foreground = Brushes.White,
    Focusable = true,
};

cmbLogin.Items.Add("AAAAA");
cmbLogin.Items.Add("BBBBB");

现在我想定义样式和触发器:
Style cmbStyle = new Style(typeof(ComboBox));
cmbStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.Green));
cmbStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Red));


Trigger t1 = new Trigger { Property = ComboBox.IsMouseOverProperty, Value = true };
t1.Setters.Add( new Setter(ComboBox.BackgroundProperty, Brushes.Yellow));
cmbStyle.Triggers.Add(t1);
cmbLogin.Style = cmbStyle;

但是,无论是否使用鼠标,效果始终与之前相同。 enter image description here enter image description here 谢谢。

你正在定义自己的 Style,但是在与默认的 ControlTemplate 相关联时使用它。相对于控件模板,TriggersSetters 正确地工作。要么你也定义自己的自定义 ControlTemplate,要么遵循默认的 ControlTemplate。你不能两者兼得。 - jsanalytics
1
为什么不使用XAML呢?它比其他方式容易100倍! - Markinson
我必须使用appdomain技术构建插件dll,因此没有xaml,但是通过读取来自xml文件的运行时属性来动态构建所有内容。这就是原因。 - Luca
那是一场打斗吗?看起来只是小争吵而已…… - Luca
你使用Win8或更高版本吗?请查看这个问题(可能是重复的)。 - icebat
显示剩余2条评论
1个回答

3
我认为你的问题不在于Code-Behind方法,而是使用了错误的属性。 即使使用XAML,您所期望的UI也不会出现。
ComboBox的“Background”属性并不是您需要的属性。
为了澄清第一点: 如果您尝试更改前景色而不是背景色,它将起作用并更改文本前景色。
但不幸的是,要更改ComboBox的背景或高亮颜色,您需要做更多的工作。以下是一个很好的解释: 更改WPF ComboBox的背景 自定义WPF ComboBox样式 希望这有所帮助。

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