x:Static のマークアップ拡張機能x:Static Markup Extension

共通言語仕様 (CLS: Common Language Specification) に準拠した方法で定義されている静的な値渡しのコードエンティティを参照します。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.

XAML 属性の使用方法XAML Attribute Usage

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

XAML 値XAML Values

prefix 省略可能です。Optional. 既定以外のマップされた XAML 名前空間を参照するプレフィックス。A prefix that refers to a mapped, non-default XAML namespace. 既定の XAML 名前空間からの静的なプロパティを参照することはほとんどないため、prefix は明示的に使用されます。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).

RemarksRemarks

参照されるコードエンティティは、次のいずれかである必要があります。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.

現在の XAML ドキュメントの既定の XAML 名前空間に含まれていない静的フィールドまたは静的プロパティへの x:Static 参照を作成できます。ただし、これにはプレフィックスマッピングが必要です。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 スキーマコンテキストを使用して実行されている場合に、xaml サービスとその XAML リーダーおよび XAML ライター .NET Framework によって実行できます。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 は実際には CLR 型名ではなく XAML 型名ですが、既定の 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 の使用方法が2つあります。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.

WPF の使用上の注意WPF Usage Notes

WPF プログラミングに使用する既定の XAML 名前空間には、多くの便利な静的プロパティが含まれていません。便利な静的プロパティのほとんどは、{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 に存在する型を参照していますが、WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation) の既定の XAML 名前空間に含まれていません。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. たとえば、Environment クラスの静的プロパティを参照するために、System CLR 名前空間と mscorlib アセンブリに対する XAML 名前空間のマッピングを含む x:Static 参照を使用できます。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 アセンブリに存在する型を参照していますが、その型は、WPF の既定の XAML 名前空間の一部としてマップされていない CLR 名前空間内にあります。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. WPF の既定の XAML 名前空間への CLR 名前空間のマッピングは、さまざまな WPF アセンブリの定義によって実行されます (この概念の詳細については、「 WPF xaml の 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.

WPF でプレフィックスと XAML 名前空間を使用する方法の詳細については、「 WPF xaml の 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