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


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

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

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

В языке разметки расширяемых приложений (XAML) свойства стиля и шаблона можно технически задать одним из двух способов. Синтаксис атрибутов можно использовать для ссылки на стиль, определенный в ресурсе, например объект <Style="{StaticResourcemyResourceKey}" .../>. Кроме того, можно использовать синтаксис свойства элемента для определения встроенного стиля, например:

< объект>

< объекта.Style>

< Style .../>

</ объекта.Style>

</ объект>

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

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

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

См. также