Расширение разметки x:Static
Ссылается на любую статическую сущность кода по значению, определенную совместимым с Common Language Specification (CLS) образом. Статическое свойство, на которое имеется ссылка, может использоваться для предоставления значения свойства в XAML.
Использование атрибута XAML
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
Значения XAML
prefix |
Необязательный. Префикс, который относится к сопоставленному пространству имен XML, не являющемуся пространством имен по умолчанию. prefix явно приведен в варианте использования, так как редко создаются ссылки на статические свойства, полученные из пространства имен XAML по умолчанию. См. примечания. |
typeName |
Обязательный. Имя типа, который определяет требуемый статический член. |
staticMemberName |
Обязательный. Имя требуемого статического значения члена (константа, статическое свойство, поле или значение перечисления). |
Заметки
сущность кода, на которую ссылаются, должна быть одной из следующих:
Константа
Статическое свойство
Поле
Значение перечисления.
Указание любой другой сущности кода, например нестатического свойства, приводит к ошибке времени компиляции, если для код XAML компилируется разметка, или к исключению синтаксического анализа времени загрузки XAML.
Ссылки x:Static могут быть применены к статическим полям или свойствам, которые отсутствуют в пределах пространства имен XAML по умолчанию для текущего документа XAML; однако это требует сопоставления префикса. Пространства имен XAML почти всегда задаются в корневом элементе документа XAML.
Операции поиска для статических свойств могут выполняться службами XAML .NET Framework и модулями чтения и записи XAML при работе с контекстом схемы XAML по умолчанию. Этот контекст схемы XAML может использовать отражение среды CLR для предоставления необходимых статических значений для построения графа объекта. Указываемое имя typeName, на самом деле является именем типа XAML, а не именем типа CLR, хотя по сути это одно и то же имя, если используется содержимое XAML-схемы по умолчанию или все существующие платформы на основе CLR, реализующие XAML.
Используйте предупреждение при создании ссылок x:Static, которые не являются непосредственно типом значения свойства. В последовательности обработки XAML предоставленные значения из расширения разметки не вызывают дополнительного преобразования значений. Это верно даже в том случае, если ссылка x:Static создает текстовую строку, а преобразование значений атрибутов на базе текстовой строки обычно выполняется для этого конкретного элемента или для значения любого элемента возвращаемого типа.
Синтаксис атрибута является наиболее распространенным синтаксисом, который используется с этим расширением разметки. маркер строки, указанный после идентификатора строки x:Static, получает значение Member базового класса расширения StaticExtension.
Существуют два других технически возможных вариант использования XAML. Однако эти случаи использования менее распространены, так как они излишне подробны:
Синтаксис объектного элемента: <x:Static Member="prefix:typeName.staticMemberName" .../>
Синтаксис атрибута с явным свойством элемента для строка инициализации: <object property="{x:Static Member=prefix:typeName.staticMemberName}" .../>
В реализации служб XAML .NET Framework обработка этого расширения разметки определяется классом StaticExtension.
x:Static является расширением разметки. Все расширения разметки в XAML используют знаки { и } в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAML узнает, что расширение разметки должно предоставлять значение. Дополнительные сведения о расширениях разметки см. в разделе Общие сведения о расширениях разметки для XAML.
Примечания об использовании WPF
Пространство имен XAML по умолчанию, используемое для программирования WPF, не содержит многих полезных статических свойств, а большинство полезных статические свойства имеют поддержку, например, преобразователей типов, которые облегчают использование без необходимости {x:Static}. Для статических свойств необходимо сопоставить префикс пространства имен XAML, если выполняется одно из следующих условий:
Ссылка на тип, который существует в WPF, но не является частью пространства имен XAML по умолчанию для WPF (https://schemas.microsoft.com/winfx/2006/xaml/presentation). Это достаточно общий скрипт для использования x:Static. Например, можно использовать ссылку x:Static с сопоставлением пространства имен XAML для пространства имен CLR System и сборки mscorlib, чтобы ссылаться на статические свойства класса Environment.
Ссылка на тип из пользовательской сборки.
Ссылка на тип, который существует в сборке WPF, но этот тип доступен внутри пространства имен CLR, которое не было сопоставлено, чтобы быть частью определения пространства имен XAML по умолчанию в WPF. Сопоставление пространств имен среды CLR в пространство имен XAML по умолчанию для WPF выполняется путем определения в различных сборках WPF (дополнительные сведения по этой концепции см. в разделе Пространства имен XAML и сопоставление пространств имен для WPF XAML). Несопоставленные пространства имен CLR могут существовать, если пространство имен CLR в основном состоит из определений классов, которые обычно не предназначены для XAML, например System.Windows.Threading.
Дополнительные сведения об использовании префиксов и пространств имен XAML в WPF см. в разделе Пространства имен XAML и сопоставление пространств имен для WPF XAML.