Поделиться через


Встроенные стили и шаблоны

Приложение Windows Presentation Foundation (WPF) предоставляет объекты Style и объекты шаблонов (подклассы FrameworkTemplate) как способ определения внешнего вида элемента в ресурсах, поэтому они могут быть использованы много раз. По этой причине атрибуты в XAML, принимающие аргументы типов Style и FrameworkTemplate, почти всегда создают ресурсные ссылки на существующие стили и шаблоны, вместо определения новых.

Ограничения встроенных стилей и шаблонов

В Extensible Application Markup Language (XAML) свойства стиля и шаблона формально могут задаваться одним из двух способов. Можно использовать синтаксис атрибута для ссылки на стиль, который был определен в ресурсе, например <object Style="{StaticResource myResourceKey}" .../>. Или можно использовать синтаксис элемента свойства, чтобы определить встроенный стиль, например:

<object>

<object.Style>

<Style .../>

</object.Style>

</object>

Использование атрибута является гораздо более распространенным. Стиль, определенный встроенным образом и не определенный в ресурсах, обязательно распространяется только на содержащий элемент и не может быть повторно использован так же просто, поскольку он не имеет ключа ресурса. Обычно стиль, определенный ресурсом, является более гибким, полезным и соответствующим принципу общей модели программирования Windows Presentation Foundation (WPF) для отделения программной логики в коде от конструкторской в разметке.

Обычно нет причин устанавливать встроенный стиль или шаблон даже в том случае, если требуется использовать этот стиль или шаблон только в этом месте. Большинство элементов, которые могут принимать стиль или шаблон, также поддерживают свойство и модель содержимого. Если используется любое логическое дерево, созданное с помощью стилей или шаблонов, то даже было бы проще заполнить это свойство содержимого эквивалентными дочерними элементами в прямой разметке. Это полностью обойдет механизмы стиля и шаблона.

Для стилей и шаблонов также доступны другие синтаксисы, разрешаемые расширениями разметки, которые возвращают объект. Два таких расширения, имеющие возможные сценарии, включают TemplateBinding и Binding.

См. также

Основные понятия

Стилизация и использование шаблонов