Автоматическое применение шаблонов

41

В текущем примере каждая кнопка отвечает за привязку себя к соответствующему шаблону через свойство Template или Style. Это имеет смысл, если шаблон элемента управления используется для создания специфического эффекта в определенном месте приложения. Но это менее удобно, если необходимо сменить обложку каждой кнопки во всем приложении, обеспечив специальный внешний вид.

В такой ситуации, скорее всего, понадобится, чтобы все кнопки приложения применяли шаблон автоматически. Для этого необходимо применить шаблон элемента управления посредством стиля. Трюк состоит в использовании типизированного стиля, который автоматически оказывает влияние на элементы соответствующего типа, и устанавливает их свойство Template. Ниже приведен пример стиля, который должен быть помещен в коллекцию ресурсов словаря для придания всем кнопкам нового вида:

<Style TargetType="{х:Type Button}">
   <Setter Property="Control.Template" Value="{StaticResource ButtonTemplate}"
</Style>

Это работает потому, что в стиле не указано имя ключа, а это значит, что вместо него используется тип элементов (Button). Помните, что от этого стиля можно отказаться, создав кнопку, которая явно устанавливает свое свойство Style в null:

<Button Style="{х:Null} " ... ></Button>

Этот прием работает еще лучше, если следовать рекомендуемым принципам проектирования и определить кнопку в отдельном словаре ресурсов. В такой ситуации стиль не вступит в действие, пока не будет добавлен дескриптор ResourceDictionary, который импортирует ресурсы во все приложение или определенное окно, как было описано ранее.

Словарь ресурсов, содержащий комбинацию стилей на основе типов, часто называется темой. Возможности тем впечатляют. Темы позволяют взять готовое приложение WPF и полностью поменять обложки всех его элементов управления, вообще не затрагивая разметку пользовательского интерфейса. Все, что для этого понадобится — добавить в проект словари ресурсов и объединить их в коллекции Application.Resources внутри App.xaml.

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

Чтобы использовать тему, добавьте в проект файл .xaml, который содержит словарь ресурсов. Например, средства WPF Futures включают файл темы по имени ExpressionDark.xaml. Затем понадобится активизировать стили в приложении. Это можно сделать на уровне окон, но быстрее будет импортировать их на уровень приложения, добавив примерно такую разметку:

<Application ... >
   <Application.Resourсеs>
      <ResourceDictionary Source="ExpressionDark.xaml"/>
   </Application.Resources>
</Application>

Теперь стили на основе типов, находящиеся в словаре ресурсов, вступят в полную силу и автоматически изменят внешность всех элементов управления в каждом окне приложения. Если вы — разработчик приложения, желающий построить новый пользовательский интерфейс, но не обладающий достаточной квалификацией, чтобы сделать это самостоятельно, данный трюк позволит позаимствовать чужие наработки без особых усилий.

Пройди тесты
Лучший чат для C# программистов