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

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

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

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

<object>

<object.Style>

< Style .../>

</object.Style>

</object>

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

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

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

См. также