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

Ссылается на любую статическую сущность кода по значению, определенную в соответствии с CLS-совместимой спецификацией.References any static by-value code entity that is defined in a Common Language Specification (CLS)–compliant way. Статическое свойство, на которое указывает ссылка, можно использовать для предоставления значения свойства в XAML.The static property that is referenced can be used to provide the value of a property in XAML.

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

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

Значения XAMLXAML Values

prefix Необязательный параметр.Optional. Префикс, который ссылается на сопоставленное пространство имен XAML, отличное от используемого по умолчанию.A prefix that refers to a mapped, non-default XAML namespace. prefixявно указывается в использовании, так как редко используются ссылки на статические свойства, полученные из пространства имен XAML по умолчанию.prefix is shown explicitly in the usage because you rarely reference static properties that come from a default XAML namespace. См. заметки.See Remarks.
typeName Обязательный.Required. Имя типа, определяющего нужный статический элемент.The name of the type that defines the desired static member.
staticMemberName Обязательный.Required. Имя нужного статического элемента значения (константа, статическое свойство, поле или значение перечисления).The name of the desired static value member (a constant, a static property, a field, or an enumeration value).

ПримечанияRemarks

Сущность кода, на которую указывает ссылка, должна быть одной из следующих:The code entity that is referenced must be one of the following:

  • КонстантаA constant
  • Статическое свойствоA static property
  • ПолеA field
  • Значение перечисленияAn enumeration value

Указание любой другой сущности кода, например нестатического свойства, вызывает ошибку времени компиляции, если XAML размещается в компилированном виде, или исключение синтаксического анализа времени загрузки XAML.Specifying any other code entity, such as a nonstatic property, causes a compile-time error if the XAML is markup compiled, or a XAML load-time parse exception.

Можно сделать x:Static ссылки на статические поля или свойства, которые не находятся в пространстве имен XAML по умолчанию для текущего документа XAML, однако для этого требуется сопоставление префикса.You can make x:Static references to static fields or properties that are not in the default XAML namespace for the current XAML document; however, this requires a prefix mapping. Пространства имен XAML практически всегда определяются в корневом элементе документа XAML.XAML namespaces are almost always defined on the root element of the XAML document.

Операции уточняющего запроса для статических свойств можно выполнять с помощью .NET Framework служб XAML и их средств чтения и записи XAML, когда они выполняются с контекстом схемы XAML по умолчанию.The lookup operations for static properties can be performed by .NET Framework XAML Services and its XAML readers and XAML writers, when they are running with the default XAML schema context. Этот контекст схемы XAML может использовать отражение CLR для предоставления необходимых статических значений для построения графа объекта.This XAML schema context can use CLR reflection to provide the necessary static values for object graph construction. В typeName действительности указывается имя типа XAML, а не имя типа CLR, хотя при использовании контекста схемы XAML по умолчанию или при использовании всех существующих платформ, основанных на XAML в среде CLR, они по сути совпадают.The typeName you specify is actually a XAML type name, not a CLR type name, although these are essentially the same name when using the default XAML schema context or when using all existing CLR-based XAML-implementing frameworks.

Будьте внимательны при создании x:Static ссылок, которые не относятся непосредственно к типу значения свойства.Use caution when you make x:Static references that are not directly the type of a property's value. В последовательности обработки XAML указанные значения из расширения разметки не вызывают преобразование дополнительного значения.In the XAML processing sequence, provided values from a markup extension do not invoke additional value conversion. Это справедливо, даже если ваша x:Static ссылка создает текстовую строку, а преобразование значения для значений атрибутов на основе текстовой строки обычно происходит либо для этого конкретного элемента, либо для любых значений элементов типа возвращаемого значения.This is true even if your x:Static reference creates a text string, and a value conversion for attribute values based on text string typically occurs either for that specific member or for any member values of the return type.

Синтаксис атрибутов является наиболее распространенным синтаксисом, используемым с этим расширением разметки.Attribute syntax is the most common syntax used with this markup extension. Строковая лексема, указываемая после строки идентификатора x:Static, присваивается в качестве значения Member соответствующего класса расширения StaticExtension.The string token provided after the x:Static identifier string is assigned as the Member value of the underlying StaticExtension extension class.

Существует еще два варианта использования XAML, которые технически возможны.There are two other XAML usages that are technically possible. Однако эти случаи использования менее распространены, так как они необязательно являются подробными:However, these usages are less common because they are unnecessarily verbose:

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

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. Синтаксис атрибута с явным свойством элемента для строки инициализации.Attribute syntax with explicit Member property for initialization string.

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

В .NET Framework реализации служб XAML обработка этого расширения разметки определяется StaticExtension классом.In the .NET Framework XAML Services implementation, the handling for this markup extension is defined by the StaticExtension class.

x:Static является расширением разметки.x:Static is a markup extension. Все расширения разметки в XAML используют { символы } и в синтаксисе атрибутов, что является соглашением, по которому обработчик XAML распознает, что расширение разметки должно предоставлять значение.All markup extensions in XAML use the { and } characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must provide a value. Дополнительные сведения о расширениях разметки см. в разделе Markup Extensions for XAML Overview.For more information about markup extensions, see Markup Extensions for XAML Overview.

Примечания об использовании WPFWPF Usage Notes

Пространство имен XAML по умолчанию, используемое для программирования WPF, не содержит много полезных статических свойств, а большая часть полезных статических свойств имеет поддержку, например, преобразователи типов, которые упрощают {x:Static} использование без необходимости.The default XAML namespace you use for WPF programming does not contain many useful static properties, and most of the useful static properties have support such as type converters that facilitate the usage without requiring {x:Static} . Для статических свойств необходимо сопоставлять префикс для пространства имен XAML, если выполняется одно из следующих условий.For static properties, you must map a prefix for a XAML namespace if one of the following is true:

  • Вы ссылаетесь на тип, который существует в WPF, но не является частью пространства имен XAML по умолчаниюhttp://schemas.microsoft.com/winfx/2006/xaml/presentationдля WPF ().You are referencing a type that exists in WPF but is not part of the default XAML namespace for WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation). Это довольно распространенный сценарий использования x:Static.This is a fairly common scenario for using x:Static. Например, вы можете использовать x:Static ссылку с сопоставлением System пространства имен XAML с пространством имен CLR и сборкой mscorlib для ссылки Environment на статические свойства класса.For example, you might use an x:Static reference with a XAML namespace mapping to the System CLR namespace and mscorlib assembly in order to reference the static properties of the Environment class.

  • Вы ссылаетесь на тип из пользовательской сборки.You are referencing a type from a custom assembly.

  • Вы ссылаетесь на тип, который существует в сборке WPF, но этот тип находится в пространстве имен CLR, которое не было сопоставлено как часть пространства имен XAML по умолчанию WPF.You are referencing a type that exists in a WPF assembly, but that type is within a CLR namespace that was not mapped to be part of the WPF default XAML namespace. Сопоставление пространств имен CLR с пространством имен XAML по умолчанию для WPF выполняется определениями в различных сборках WPF (Дополнительные сведения об этой концепции см. в разделе пространства имен XAML и сопоставление пространств имен для WPF XAML).The mapping of CLR namespaces into the default XAML namespace for WPF is performed by definitions in the various WPF assemblies (for more information about this concept, see XAML Namespaces and Namespace Mapping for WPF XAML). Несопоставленные пространства имен CLR могут существовать, если пространство имен CLR состоит преимущественно из определений классов, которые обычно не предназначены для XAML, например System.Windows.Threading.Non-mapped CLR namespaces can exist if that CLR namespace is composed mostly of class definitions that are not typically intended for XAML, such as System.Windows.Threading.

Дополнительные сведения об использовании префиксов и пространств имен XAML для WPF см. в разделе пространства имен и сопоставление пространств имен XAML для WPF XAML.For more information on how to use prefixes and XAML namespaces for WPF, see XAML Namespaces and Namespace Mapping for WPF XAML.

См. такжеSee also