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

Ссылается на любой сущности кода статический по значению, определенному в Спецификация CLSCommon Language Specification (CLS)— надлежащим способом.References any static by-value code entity that is defined in a Спецификация CLSCommon 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.

Операции поиска для статических свойств могут выполняться служб XAML .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 по умолчанию или при использовании всех существующих платформ, основанных на среде CLR реализация XAML.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}" ... />
    

В реализации служб XAML .NET Framework, обработка данного расширения разметки определяется 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 по умолчанию для WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation).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 ссылку с сопоставление пространства имен XAML для System сборки пространства имен и mscorlib среды CLR, чтобы ссылаться на статические свойства класса 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