基于 SystemColors 的 WPF 通用颜色

标签 wpf systemcolors

我需要在我的应用程序中使用一些通用颜色,这些颜色基于系统颜色,这些颜色根据事件主题而变化。所以我相信我需要一些 IValueConverters,每个 IValueConverters 在给定系统颜色画笔时返回一个画笔。

但是我应该把逻辑放在哪里呢?在我看来,我可能有 2 个选择。

选项 1) 将 SolidColorBrush(es) 放在主题资源字典中,它绑定(bind)到一些系统颜色并将它们转换为新的 Brush(es)。这我已经尝试过并且似乎有效,但是我如何从代码隐藏中引用这些新的 SolidColorBrush(es)。

选项 2) 创建一个类似于 SystemColors 类的类。我不太清楚我是怎么做到的。 SystemColors类中的SystemResourceKey和Brush是什么关系?它们是如何连接的?

最好的问候, 杰斯珀

最佳答案

1. 例如

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Test">
    <SolidColorBrush x:Key="Brush1" Color="Green"/>
</ResourceDictionary>
ResourceDictionary dict = new ResourceDictionary();
dict.Source = new Uri("pack://application:,,,/TestDictionary.xaml");
Brush brush1 = dict["Brush1"] as SolidColorBrush;

2. 您不能使用 SystemResourceKeys,它们是内部的,但可能会重用 SystemColors 类中的键来构建您的字典,您使用什么并不重要使用,键可以是任何对象,this question可能会感兴趣。

关于基于 SystemColors 的 WPF 通用颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2544187/

相关文章:

wpf - 如何防止键盘导航?

wpf - 为什么 WPF 主题不使用 SystemColors?

c# - 我可以在不使用 pinvoke 的情况下在 C# 中获取系统颜色的 RGB 吗?

jquery - 在 IE 中使用 jQuery 从 CSS 获取系统颜色

.net - 在.NET中获取Windows XP颜色

wpf - MVVM:将 ListView.SelectedItem.Property 绑定(bind)到 VM 属性

c# - ContentControl 未更新

wpf - 您如何导航复杂的可视化树以重新绑定(bind)现有元素?

c# - WPF 自定义窗口在设计时不应用其通用模板