Общие цвета WPF на основе SystemColors - PullRequest
3 голосов
/ 30 марта 2010

Мне нужно, чтобы в моем приложении были общие цвета, основанные на системных цветах, которые меняются в зависимости от активной темы. Поэтому я считаю, что мне нужны некоторые IValueConverter, каждый из которых возвращает кисть, если ей дана кисть системного цвета.

Но куда мне положить логику? На мой взгляд, у меня может быть 2 варианта.

Вариант 1) поместить SolidColorBrush (es) в тематический словарь ресурсов, который привязывается к некоторым системным цветам и преобразует их в новые кисти. Это я пробовал, и, похоже, работает, но как я могу ссылаться на эти новые SolidColorBrush (s) из кода позади.

Вариант 2) создать класс, аналогичный классу SystemColors. Я не совсем знаю, как я это делаю. Какова связь между SystemResourceKey и Brush в классе SystemColors? Как они связаны?

С наилучшими пожеланиями, Jesper

1 Ответ

0 голосов
/ 01 мая 2011

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 для создания вашего словаря, на самом деле не имеет значения, что вы используете, ключ может быть любой объект, этот вопрос может представлять интерес.

...