2010-03-30 79 views
3

我需要在我的应用程序中使用一些通用颜色,这些颜色基于系统颜色,并根据活动主题进行更改。所以我相信我需要一些IValueConverters,每个IValueConverters在给定系统颜色刷时都会返回一个画笔。基于SystemColors的WPF泛型颜色

但我在哪里放逻辑?正如我所看到的,我可能有2个选项。

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

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

此致 的Jesper

回答

0

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可能是感兴趣的。