6

我正在后面的代码中创建触发器,并且我正在尝试将 setter 的值绑定到在后面的代码中创建的动态资源,这样我就可以随时更新资源并且仍然更新 setter 的值。我到此为止

SolidColorBrush brush = Brushes.Red;
Resources.Add("NewBrush",brush);
Setter setter = new Setter();
setter.Property = Control.BackgroundProperty;

但我不确定如何将设置器的值绑定到创建的动态资源。我不能简单地在 XAML 中创建资源,因为需要动态创建资源。如何将 Setter 的值绑定到动态资源,以便更改资源将改变 setter 的值。

更多信息需要澄清。这一切都在后面的代码中完成,因为一切都是动态生成的。触发器、设置器、格式化、控件都是基于 XML 结构创建的。

4

1 回答 1

8

一些使用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 值应该采用的。无论如何,这似乎有效。

于 2013-03-12T16:19:58.413 回答