如何编辑资源字典中的setter

时间:2016-04-11 21:03:24

标签: c# wpf resourcedictionary

好的我觉得这很简单,但似乎几乎不可能。我的应用程序中有一个资源字典,我定义了这样的样式:

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

我的最终目标是允许用户选择颜色并让他们更改应用的外观。我仍然希望使用我的resourcedictionary来控制样式,因此他们可以选择背景颜色,主要文本颜色和强调颜色,并在整个应用程序中保持一致。但我找不到编辑resourceDictionary的方法。我试图使用在这篇SO帖子(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>

那里有任何想法或建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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