wpf在后台写triggers

动态生成按钮,根据绑定的IsEnable属性进行前景色的变化。
如果为false时,将按钮设置为灰色。
但如下代码导致整个按钮没有生成,后台添加样式触发器的正确写法是怎样的呢?


           Button btn = new Button();

            ControlTemplate template=new ControlTemplate(btn.GetType());
            Setter setter=new Setter();         
            setter.Property = ForegroundProperty;
            setter.Value = Brushes.Gray;
            Trigger trigger = new Trigger();
            trigger.Property = Button.IsEnabledProperty;
            trigger.Value = false;
            trigger.Setters.Add(setter);
            template.Triggers.Add(trigger); 
            btn.Template= template;

参考GPT和自己的思路:您的代码中的样式触发器添加是正确的,但是没有设置按钮的其他属性,所以按钮没有生成。您可以在代码中添加以下属性设置代码:

            btn.Content = "Dynamic Button";
            btn.Width = 100;
            btn.Height = 30;
            btn.IsEnabled = true;

这将为按钮设置内容、宽度、高度和启用状态。完成这些设置后,您的动态按钮就能够正确地显示并且根据IsEnabled属性进行前景色的变化了。

还是没有显示哦,但去掉template赋值代码可以显示出来


Button btn = new Button();
           btn.Height = 300;
            btn.Width= 200;
            btn.Content = "OK";
            ControlTemplate template = new ControlTemplate(btn.GetType());
            Setter setter = new Setter();
            setter.Property = ForegroundProperty;
            setter.Value = Brushes.Gray;
            Trigger trigger = new Trigger();
           trigger.Property = Button.IsEnabledProperty;
            trigger.Value = true;
            trigger.Setters.Add(setter);
            template.Triggers.Add(trigger);
           btn.Template = template;//去掉这行可以显示
           stack.Children.Add(btn);

参考GPT和自己的思路:你的代码中的后台添加样式触发器的写法是正确的。根据你的描述,问题可能出在动态生成按钮的代码中。请确保你已经将新按钮添加到适当的父元素中,并且已经将IsEnabled属性绑定到适当的数据源属性。如果问题仍然存在,请提供更多详细信息。