Расширение разметки x:Static

Ссылается на любую статическую сущность кода по значению, определенную в соответствии со спецификацией CLS. Статическое свойство, на которое ссылается ссылка, можно использовать для предоставления значения свойства в XAML.

Использование атрибута XAML

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

Значения XAML

Стоимость Description
prefix Необязательно. Префикс, ссылающийся на сопоставленное пространство имен XAML, отличное от по умолчанию. prefix явно отображается в использовании, так как редко ссылается на статические свойства, поступающие из пространства имен XAML по умолчанию. См. заметки.
typeName Обязательно. Имя типа, определяющего нужный статический элемент.
staticMemberName Обязательно. Имя требуемого элемента статического значения (константы, статического свойства, поля или значения перечисления).

Замечания

Сущность кода, на которую ссылается ссылка, должна быть одной из следующих:

  • Константы
  • Статическое свойство
  • Поле
  • Значение перечисления

Указание любой другой сущности кода, такой как нестатическое свойство, вызывает ошибку во время компиляции XAML или исключение синтаксического анализа времени загрузки XAML.

Вы можете ссылаться x:Static на статические поля или свойства, которые не находятся в пространстве имен XAML по умолчанию для текущего документа XAML. Однако для этого требуется сопоставление префикса. Пространства имен XAML почти всегда определяются в корневом элементе документа XAML.

Операции подстановки статических свойств могут выполняться службами .NET XAML и его средствами чтения XAML и средствами записи XAML при выполнении с контекстом схемы XAML по умолчанию. Этот контекст схемы XAML может использовать отражение СРЕДЫ CLR для предоставления необходимых статических значений для построения графа объектов. Указанное typeName имя фактически является именем типа XAML, а не именем типа СРЕДЫ CLR, хотя это, по сути, одно и то же имя при использовании контекста схемы XAML по умолчанию или при использовании всех существующих платформ, реализующих XAML на основе СРЕДЫ CLR.

Используйте осторожность при создании x:Static ссылок, которые не являются непосредственно типом значения свойства. В последовательности обработки XAML предоставленные значения из расширения разметки не вызывают дополнительное преобразование значений. Это верно, даже если ссылка x:Static создает текстовую строку, а преобразование значений для значений атрибутов на основе текстовой строки обычно происходит либо для этого конкретного элемента, либо для любых значений элементов возвращаемого типа.

Синтаксис атрибутов является наиболее распространенным синтаксисом, используемым с этим расширением разметки. Строковая лексема, указываемая после строки идентификатора x:Static, присваивается в качестве значения Member соответствующего класса расширения StaticExtension.

Существует два других использования XAML, которые технически возможны. Однако эти использования менее распространены, так как они не являются ненужными подробными:

  1. Синтаксис элемента объекта.

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. Синтаксис атрибута с явным свойством Member для строки инициализации.

    <object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
    

В реализации служб XAML .NET обработка этого расширения разметки определяется классом StaticExtension .

x:Static является расширением разметки. Все расширения разметки в XAML используют { и } символы в синтаксисе атрибутов, то есть соглашение, с помощью которого обработчик XAML распознает, что расширение разметки должно предоставить значение. Дополнительные сведения о расширениях разметки см. в разделе Markup Extensions for XAML Overview.

Заметки об использовании WPF

Пространство имен XAML по умолчанию, используемое для программирования WPF, не содержит много полезных статических свойств, и большинство полезных статических свойств поддерживают такие преобразователи типов, которые упрощают использование без необходимости {x:Static} . Для статических свойств необходимо сопоставить префикс для пространства имен XAML, если одно из следующих значений имеет значение true:

  • Вы ссылаетесь на тип, который существует в WPF, но не является частью пространства имен XAML по умолчанию для WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation). Это довольно распространенный сценарий использования x:Static. Например, можно использовать ссылку x:Static с сопоставлением пространства имен XAML с System пространством имен CLR и сборкой mscorlib, чтобы ссылаться на статические свойства Environment класса.

  • Вы ссылаетесь на тип из пользовательской сборки.

  • Вы ссылаетесь на тип, который существует в сборке WPF, но этот тип находится в пространстве имен CLR, которое не было сопоставлено с частью пространства имен XAML по умолчанию WPF. Сопоставление пространств имен СРЕДЫ CLR с пространством имен XAML по умолчанию для WPF выполняется определениями в различных сборках WPF (дополнительные сведения об этой концепции см. в статьях "Пространства имен XAML" и "Сопоставление пространства имен" для WPF XAML). Не сопоставленные пространства имен CLR могут существовать, если это пространство имен CLR состоит в основном из определений классов, которые обычно не предназначены для XAML, например System.Windows.Threading.

Дополнительные сведения об использовании префиксов и пространств имен XAML для WPF см. в разделе "Пространства имен XAML" и "Сопоставление пространств имен" для WPF XAML.

См. также