Расширение разметки x:Static
Ссылается на любую статическую сущность кода по значению, определенную в соответствии со спецификацией CLS. Статическое свойство, на которое ссылается ссылка, можно использовать для предоставления значения свойства в XAML.
Использование атрибута XAML
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
Значения XAML
Ценность | Описание |
---|---|
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, которые технически возможны. Однако эти использования менее распространены, так как они не являются ненужными подробными:
Синтаксис элемента объекта.
<x:Static Member="prefix:typeName.staticMemberName" ... />
Синтаксис атрибута с явным свойством Member для строки инициализации.
<object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
В реализации служб XAML .NET обработка этого расширения разметки определяется классом StaticExtension.
x:Static
— это расширение разметки. Все расширения разметки в XAML используют {
и }
символы в синтаксисе атрибутов, что является соглашением, с помощью которого обработчик XAML распознает, что расширение разметки должно предоставлять значение. Дополнительные сведения о расширениях разметки см. в расширения разметки дляXAML.
Заметки об использовании WPF
Пространство имен XAML по умолчанию, используемое для программирования WPF, не содержит много полезных статических свойств, и большинство полезных статических свойств поддерживают такие преобразователи типов, которые упрощают использование, не требуя {x:Static}
. Для статических свойств необходимо сопоставить префикс для пространства имен XAML, если одно из следующих значений имеет значение true:
Вы ссылаетесь на тип, который существует в WPF, но не является частью пространства имен XAML по умолчанию для WPF (
http://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.
См. также
.NET Desktop feedback