【问题标题】:Binding Setter value to DynamicResource将 Setter 值绑定到 DynamicResource
【发布时间】:2013-03-12 15:39:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • I can't simply create the resource in XAML because the resource needs to be created dynamically - 没有理由不在 XAML 中定义 Setter
  • @HighCore 我试图在上面澄清
  • 你能发一个 XML 文件的例子吗?

标签: wpf binding setter dynamicresource


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2013-10-27
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多