wpf - 将 Setter 值绑定(bind)到 DynamicResource

标签 wpf binding setter dynamicresource

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

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

但我不确定如何将 setter 的值绑定(bind)到创建的动态资源。我不能简单地在 XAML 中创建资源,因为需要动态创建资源。如何将 Setter 的值绑定(bind)到动态资源,以便更改资源将更改 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;
        }
    }

有趣的是,Setter.Value 需要一个 DynamicResourceExtension 的值。我最初认为由 DynamicResourceExtension.ProvideValue() 生成的表达式将是 setter 值应该采用的。无论如何,这似乎有效。

关于wpf - 将 Setter 值绑定(bind)到 DynamicResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365558/

相关文章:

命名空间 "clr-namespace"中不存在 WPF <class>

c# - 将列表中的变量绑定(bind)到文本 block INotifyPropertyChanged

wpf - WPF 中的样式和绑定(bind)

c# - 有什么方法可以在 WPF 中 block 复制部分图片?

c# - 无法访问Strings.resx?

C# 可以从派生类调用基类属性吗

导致 exc_bad_access 的 swift setter

javascript - setter 和 Object.create() 的使用;

c# - 如何将 ComboBox 绑定(bind)到 DataTemplate 中的所有枚举类型?

macos - 将数字键盘键与 Emacs 24 和 OS/X 绑定(bind)