fla*_*aud 5 wpf setter binding dynamicresource
我正在代码中创建触发器,我正在尝试将setter的值绑定到后面代码中创建的动态资源,这样我就可以更新资源,并且仍然可以更新setter的值.我就此而已
SolidColorBrush brush = Brushes.Red;
Resources.Add("NewBrush",brush);
Setter setter = new Setter();
setter.Property = Control.BackgroundProperty;
Run Code Online (Sandbox Code Playgroud)
但我不确定如何将setter的值绑定到创建的动态资源.我不能简单地在XAML中创建资源,因为资源需要动态创建.如何将Setter的值绑定到动态资源,因此更改资源将改变setter的值.
更多信息要澄清.这都是在代码后面完成的,因为一切都是动态生成的.触发器,设置器,格式化,控件都是基于XML结构创建的.
使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,Setter.Value需要DynamicResourceExtension的值.我原本以为DynamicResourceExtension.ProvideValue()生成的表达式将是setter值应该采用的表达式.无论如何,这似乎有效.