如何在资源字典中编辑 setter

How do you edit setters in a resource dictionary

好吧,我认为这会相当简单,但似乎几乎不可能做到。我的应用程序中有一个资源字典,我定义了这样的样式:

<Style x:Key="appBackground" TargetType="Grid">
    <Setter Property="Background" Value="#ebf2f3"/>
</Style>

我的最终目标是允许用户 select 一种颜色并让他们改变应用程序的外观。我仍然想使用我的资源词典来控制样式,这样他们就可以选择背景颜色、主要文本颜色和强调颜色,并在整个应用程序中保持一致。但是我找不到编辑 resourceDictionary 的方法。我曾尝试使用此 SO post (How to dynamically add key and value to the ResourceDictionary in wpf?) 中讨论的 System.Windows.Markup.XamlWriter.Save 方法,但是当我这样做时它会添加:

<s:String x:Key="appBackground">Blue</s:String>

有什么想法或建议吗??

您可以将 setter 的值绑定到静态资源,这样您就可以像在您引用的答案中那样动态更改。

<Color x:Key="myAppBackground">#ebf2f3</Color>
<Style x:Key="appBackground" TargetType="Grid">
    <Setter Property="Background" Value="{StaticResource myAppBackground}"/>
</Style>

在此之后,您只需更改 myAppBackground 的值。

另一个建议,虽然它可能无法解决您的问题,因为它有点不同。您仍然使 setters 的值成为绑定,但不是动态更改值,您将拥有 2 个具有相同键但不同值的 ResouceDictionaries。您可以将您想要的那个与您的应用程序中的其余部分合并并应用它。我使用这种方法在应用程序启动时加载不同的颜色主题,但如果你需要多次这样做,它可能会很慢而且效率不高。