Как мне сопоставить стили моих элементов управления с текущей темой? (WPF) - PullRequest
7 голосов
/ 12 февраля 2009

Если я создаю пользовательский элемент управления с WPF, как я могу предоставить стили для элемента управления, соответствующие текущей применяемой теме (Aero, Luna, Classic и т.

Например, я хотел бы применить следующее при использовании Aero:

<Style>
    <Setter Property="Background" Value="White"/>
</Style>

Но затем примените другой стиль при использовании Luna:

<Style>
    <Setter Property="Background" Value="#DFDFDF"/>
</Style>

Можно ли как-то расширить базовые темы, чтобы обеспечить поддержку моего нового элемента управления?

Ответы [ 2 ]

9 голосов
/ 13 февраля 2009

Некоторые ссылки, которые могут оказаться полезными:

http://arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows-theme.aspx

http://www.browsoft.com/tutorials/DefaultTheme.html

http://blogs.msdn.com/wpfsdk/archive/2007/07/31/using-themes-with-custom-controls.aspx

По сути, вы создаете словари ресурсов для своих пользовательских элементов управления, которые называются так:

Classic.xaml (“Classic” Windows 9x/2000 look on Windows XP.)
Luna.NormalColor.xaml (Default blue theme on Windows XP.)
Luna.Homestead.xaml (Olive theme on Windows XP.)
Luna.Metallic.xaml (Silver theme on Windows XP.)
Royale.NormalColor.xaml (Default theme on the Windows XP Media Center Edition operating system.)
Aero.NormalColor.xaml (Default theme on the Windows Vista operating system.)

Поместите различные стили для ваших элементов управления в эти файлы, и они будут загружены на основе текущей темы ОС.

0 голосов
/ 13 февраля 2009

Вы можете использовать различные темы в WPF, загружая / выгружая словари ресурсов. Эти словари должны содержать стили для ваших элементов управления. Когда вы меняете словари, WPF будет применять стили к вашим элементам управления.

например, если бы это было в WhiteStyle.xaml и вы загрузили его, все ваши текстовые блоки отображали бы текст белым шрифтом.

<Style TargetType="TextBlock">
    <Setter Property="Foreground" Value="White"/>
</Style>

, если вы поменяли его на BlackStyle.xaml, который содержит

<Style TargetType="TextBlock">
    <Setter Property="Foreground" Value="Black"/>
</Style>

Ваши текстовые блоки будут отображать текст черным шрифтом. WPF обрабатывает много деталей для нас, мы просто должны сказать, что это за детали.

Замена словарей ресурсов на самом деле проста, и я оставлю это вам на усмотрение. Погуглите "WPF Themes" - это хорошее место для начала.

...