6

コードビハインドでトリガーを作成していて、セッターの値をコードビハインドで作成された動的リソースにバインドしようとしています。これにより、いつでもリソースを更新でき、セッターの値を更新できます。私はこれまでです

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

しかし、セッターの値を作成された動的リソースにバインドする方法がわかりません。リソースは動的に作成する必要があるため、XAMLでリソースを単純に作成することはできません。セッターの値を動的リソースにバインドして、リソースを変更するとセッターの値が変更されるようにするにはどうすればよいですか。

明確にするためにもう少し情報。すべてが動的に生成されるため、これはすべてコードビハインドで行われます。トリガー、セッター、フォーマット、コントロールはすべて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()によって生成された式が、セッター値がとるべきものになると考えていました。とにかく、これはうまくいくようです。

于 2013-03-12T16:19:58.413 に答える