WPF: Создание контролов, стили которых зависят от системной темы
Внешний вид – важная составляющая при создании интерфейса. Причем, неплохо бы внести разнообразие в него. И вот тут приходится очень кстати замеччательная возможность приложений – использование тем. Сделать свои контролы зависимыми от системной темы очень просто. Все что вам нужно, это папка themes, в которую вы будуте помещать файлы содержащие стили. Имя файла темы должно выглядеть так:
themes\<Theme Name>.<Theme Color>.xaml
Например, для стандартных тем Windows, создайте файлы:
themes\luna.normalcolor.xaml
themes\luna. homestead.xaml
themes\luna.metallic.xaml
themes\royale.normalcolor.xaml
themes\aero.normalcolor.xaml
themes\Classic.xaml
И поместите в них необходимые стили.
ВНИМАНИЕ: У контрола будет именно тот стиль, который вы опишите, а не системный.
Также необходимо добавить файл с именем generic.xaml, который будет содержать стиль, применяемый при неописаной теме (т.е. если файла с именем текущей темы Windows в папке themes нет).
Далее необходимо добавить ссылку в файл AssemblyInfo (находится в папке "Properties" – если C#, в папке "My Project" – если VB). Ссылку необходимо добавить ниже последней строки начинающейся на [assembly... или <Assembly... (зависит от языка):
Для C#:
assembly:ThemeInfo(ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)
Для VB:
<Assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)>
Первый параметр сообщает движку, где находятся темы – в данном случае это текущая сборка. Второй параметр указывает место расположения файла generic.xaml.
А теперь, откомпилируйте и запустите ваш проект. Смените используемую Windows тему и убедитесь, что в вашем приложении тоже сменились стили!
И в заключение предоставляется
Источник:
Перевод: QiSoft
По теме
- Создаем контекстно-зависимое WPF-приложение
- #024 – Знакомство с WPF/E
- #023 – Введение в WPF, reloaded…
- #022 Введение в Microsoft Interactive Designer RC1
- #021 Применение 3D в WPF - Часть 2
- #020 Применение 3D в WPF - Часть 1
- #019 Введение в возможности 3D на WPF
- #018 Размещение контрола NET 2.0 на форме WPF
- #017 Первое Web-приложение / Подробнее о Grid / Элемент Frame
- #016 EXE, XBAP, XAML? - Все равно!