基于 SystemColors 的 WPF 通用颜色

发布于 2024-08-27 10:08:56 字数 392 浏览 6 评论 0原文

我的应用程序中需要有一些通用颜色,这些颜色基于系统颜色,并根据活动主题而变化。所以我相信我需要一些 IValueConverters,当给定系统颜色画笔时,每个 IValueConverters 都会返回一个画笔。

但我该把逻辑放在哪里呢?据我所知,我可能有两个选择。

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

选项 2)创建一个类似于 SystemColors 类的类。我不太知道我是如何去做这件事的。 SystemColors类中的SystemResourceKey和Brush之间有什么关系?它们是如何连接的?

此致, 杰斯珀

I need to have some generic colors in my application, which are based on the system colors, which change based on the active theme. So I believe I need some IValueConverters that each return a brush when given a system color brush.

But where do I put the logic? As I see it I might have 2 options.

Option 1) place SolidColorBrush(es) in the themed resource dictionary, which bind to some system colors and converts them into new Brush(es). This I have tried and it seems to work, but how do I reference these new SolidColorBrush(es) from code-behind.

Option 2) create a class similar to SystemColors class. I don't quite know how I just go about doing this. What is the relation between the SystemResourceKey and the Brush in the SystemColors class? How are they connected?

Best Regards,
Jesper

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素衣风尘叹 2024-09-03 10:08:56

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 类中的键来构建您的字典,使用什么并不重要,键可以是任何对象,这个问题 可能会感兴趣。

1. e.g.

<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. You cannot use SystemResourceKeys, they are internal, but can probably reuse the keys from the SystemColors class to build your dictionary, it does not really matter what you use, a key can be any object, this question might be of interest.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文