Архитектура WPF. Расширения XAML
Описание значений свойств при помощи XAML-элементов
Значение свойства какого-либо объекта, описанного при помощи XAML, можно просто описать при помощи атрибутов XML, например:
Когда это требуется (например, если значение свойства является коллекцией элементов или содержит вложенные объекты, которые также подлежат описанию), программист может использовать другой синтаксис на базе XML-элементов. Например:
Здесь используются выражения типа “РодительскийЭлемент.ИмяСвойства”. Воспринимаются такие выражения довольно просто и натурально.
Похожий синтаксис используется для задания свойств, зависящих от родителя (аналог функциональности IExtenderProvider Windows Forms). Такие свойства называются Attached Properties и это тема для отдельного рассказа.
Расширения разметки XAML
Язык декларативной разметки XAML спроектирован как надмножество XML и предусматривает набор специфических для него расширений. В основном эти расширения заключаются в специальном синтаксисе, который формируется при помощи фигурных скобок {}. Такие расширения называются расширения разметки (Markup Extensions). Их использование выглядит следующим образом:
Здесь для значения свойства Style используется особый синтаксис, который указывает на необходимость получения значения из указанного ресурса. В XML-пространстве имен, которое обычно используется в WPF по умолчанию (http://schemas.microsoft.com/winfx/2006/xaml/presentation) имеется несколько типов таких расширений (например, StaticResource, DynamicResource, Binding, RelativeSource, TemplateBinding). Также в XML-пространстве имен, которое обычно объявляется под псевдонимом x (http://schemas.microsoft.com/winfx/2006/xaml) находятся несколько типов таких расширений (x:Type, x:Static, x:Null, x:Key). Используются они, естественно, точно также как и вышеупомянутые.
Заметим, что в последнем примере используется «вложенный» синтаксис для расширений; с точки зрения XAML это допустимо.
Программист может определить также свои расширения, реализовав соответствующий класс, порожденный от MarkupExtension.
Интересно ознакомится со справочником по доступным стандартным расширениям разметки XAML, который входит в состав документации по WPF. Таким образом можно узнать о многих интересных возможностях, например, встраивание в XAML процедурного кода при помощи x:Code.