WPF上的代码后面的按钮触发器无法工作

时间:2019-05-02 17:06:53

标签: c# wpf

按钮的样式有2个部分。

第一个是BackgroundProperty的{​​{1}}。运行良好。

第二个是Style.Setters的{​​{1}},由鼠标在按钮上方运行。但是,它不起作用

BackgroundProperty

1 个答案:

答案 0 :(得分:0)

感谢Ed Plunkett。 我添加了ControlTemplate来覆盖控件的background画笔属性。

Style style = new Style(typeof(Button));
style.Setters.Add(new Setter(Button.BackgroundProperty, imageSourceOn));

这是我添加的ControlTemplate部分:

ControlTemplate template = new ControlTemplate(typeof(Button));
FrameworkElementFactory elemFactory = new FrameworkElementFactory(typeof(Border));
elemFactory.Name = "Border";
elemFactory.SetValue(Border.BackgroundProperty, new TemplateBindingExtension(Button.BackgroundProperty));
template.VisualTree = elemFactory;
elemFactory.AppendChild(new FrameworkElementFactory(typeof(ContentPresenter)));

而且,它是触发部分。

Setter setter = new Setter();
setter.Property = Button.BackgroundProperty;
setter.Value = imageSourceOff;
Trigger trigger = new Trigger();
trigger.Property = IsMouseOverProperty;
trigger.Value = true;
trigger.Setters.Add(setter);

最后,我设置了ControlTemplate

template.Triggers.Add(trigger);
setter = new Setter();
setter.Property = Button.TemplateProperty;
setter.Value = template;
style.Setters.Add(setter);

效果很好。