3 回答
TA贡献1824条经验 获得超6个赞
我建议不要“从后面的代码中获取颜色。
您通常需要刷子,但有时需要颜色。以下是我通常如何定义这些:
<Color x:Key="PaleBlue">#44A7F7</Color>
<Color x:Key="PaleRed">#F75B71</Color>
<SolidColorBrush x:Key="PaleBlueBrush" Color="{StaticResource PaleBlue}"/>
<SolidColorBrush x:Key="PaleRedBrush" Color="{StaticResource PaleRed}"/>
这些进入一个资源字典,该字典合并在 app.xaml 中,因此它们具有整个应用程序的范围。
如果我想改变一个主题,我为(比如说)黑暗主题定义另一个资源字典,为蓝色主题定义另一个资源字典......等等。
要更改主题,我将适当的资源字典合并到 application.current.resources 中,然后它们替换原来的。如果您希望它们立即更改,则需要使用 DynamicResource 来引用它们,但主题更改通常是不寻常的事情,并且“只是”完全重新加载您的窗口是可以接受的。
如果你真的想的话,你可以在代码中替换其中的一个。
Application.Current.Resources["PaleRedBrush"] = // 一些新的solidcolorbrush。
资源字典中的很多东西都被冻结了(有一个 Freeze() 方法),您无法更改它们。我从未尝试过确切地实施您在那里所做的事情,但我认为这可能是有问题的。
您也可以使用实现 inotifypropertychanged 的桥接静态依赖对象或类。一位候选人将涉及可观察字典作为静态属性。这将允许您通过字符串作为名称绑定到画笔。http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/ 也没试过。
TA贡献1815条经验 获得超10个赞
您不需要 Styles.xaml.cs 中的任何内容。创建 Styles.xaml 资源字典:
<ResourceDictionary>
<SolidColorBrush x:Key="AccentColor" Color="#FFFFFF" />
</<ResourceDictionary>
要在其他 xaml 文件中使用此颜色,您必须在合并的字典标记中声明它及其路径:
<Window>
<Window.Resources>
<ResourceDictionary x:Uid="ResourceDictionary_1">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</Window.Resources>
<TextBlock Background="{StaticResource AccentColor}"/>
</Window>
您可以像我以前应用 TextBlock 背景的方式使用它。您必须在 ResourceDictionary 的 Source 标记中提供 Styles.xaml 的路径。
- 3 回答
- 0 关注
- 356 浏览
添加回答
举报