Как получить динамический цвет темы в WPF - PullRequest
2 голосов
/ 10 июня 2010

В WPF у меня есть несколько словарей ресурсов и в них стили для моих панелей и элементов управления в моем приложении.Я снова и снова использую одни и те же цвета.У меня на самом деле есть 5 цветов, и они дают моему приложению хорошую цветовую схему.

Однако, если я не хочу менять тему, я должен пойти в RD и изменить там каждый цвет.

Я бы хотел где-нибудь установить цвета, но не знаю, как и где.Я попытался поместить цветной тег в один RD, но как только я ссылался на него в том же самом RD, Visual Studio потерпела крах.

Также лучшим решением было бы то, что я мог иметь цвет в качестве динамического параметра в приложениисам, чтобы пользователи могли даже изменить его сами.

Ответы [ 2 ]

4 голосов
/ 10 июня 2010

Следующий код работает в Silverlight, поэтому должен работать в WPF (возможно, с некоторыми изменениями - у меня не было времени перепроверить его):

В ваших ресурсах определите ваши цвета:

<SolidColorBrush x:Key="MyNamedColor" Color="DarkRed"/>

Затем определите некоторые стили:

<Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="{StaticResource MyNamedColor}"/>
</Style>
<Style x:Key="MyLineStyle" TargetType="Line">
    <Setter Property="Stroke" Value="{StaticResource MyNamedColor}"/>
</Style>

Затем в своем коде (либо в XAML, либо в коде позади) используйте эти стили для всех ваших текстовых блоков, строк и т. Д.

Затем, когда вы хотите изменить цвета, просто обновите исходное определение SolidColorBrush.

0 голосов
/ 10 июня 2010

Помимо решения ChrisF: если вы хотите, чтобы он был динамическим во время выполнения, вы можете использовать DynamicResource и изменить сам ресурс во время выполнения.

...