我正在代码中创建触发器,我正在尝试将setter的值绑定到后面代码中创建的动态资源,这样我可以更新资源,无论何时仍然更新setter的值。我就这个
SolidColorBrush brush = Brushes.Red;
Resources.Add("NewBrush",brush);
Setter setter = new Setter();
setter.Property = Control.BackgroundProperty;
但我不确定如何将setter的值绑定到创建的Dynamic Resource。我不能简单地在XAML中创建资源,因为资源需要动态创建。如何将Setter的值绑定到动态资源,因此更改资源将改变setter的值。
更多信息要澄清。这都是在代码后面完成的,因为一切都是动态生成的。触发器,设置器,格式化,控件都是基于XML结构创建的。
答案 0 :(得分:5)
使用ILSpy进行的一些反编译有助于解决这个问题:
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
var style = new Style(typeof (Button));
var brush = new SolidColorBrush(Colors.Blue);
Resources["TheColor"] = brush;
var dynamicResource = new DynamicResourceExtension("TheColor");
var setter = new Setter()
{
Property = Control.BackgroundProperty,
Value = dynamicResource
};
style.Setters.Add(setter);
button1.Style = style;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
var brush = new SolidColorBrush(Colors.Red);
Resources["TheColor"] = brush;
}
}
有趣的是,Setter.Value需要DynamicResourceExtension的值。我原本以为DynamicResourceExtension.ProvideValue()生成的表达式将是setter值应该采用的表达式。无论如何,这似乎有效。