将Setter值绑定到DynamicResource

时间:2013-03-12 15:39:13

标签: wpf binding setter dynamicresource

我正在代码中创建触发器,我正在尝试将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结构创建的。

1 个答案:

答案 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值应该采用的表达式。无论如何,这似乎有效。