次の方法で共有


x:Static Markup Extension

共通言語仕様 (CLS) 準拠の方法で定義されている静的な値ごとのコード エンティティを参照します。 参照される静的プロパティを使用して、XAML でプロパティの値を指定できます。

XAML 属性の使用法

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

XAML 値

価値 形容
prefix 随意。 マップされた既定以外の XAML 名前空間を参照するプレフィックス。 prefix は、既定の XAML 名前空間から取得された静的プロパティをほとんど参照しないため、使用状況に明示的に表示されます。 「解説」を参照してください。
typeName 必須。 目的の静的メンバーを定義する型の名前。
staticMemberName 必須。 目的の静的値メンバー (定数、静的プロパティ、フィールド、または列挙値) の名前。

備考

参照されるコード エンティティは、次のいずれかである必要があります。

  • 定数
  • 静的プロパティ
  • フィールド
  • 列挙値

非静的プロパティなどの他のコード エンティティを指定すると、XAML がマークアップ コンパイルされている場合、または XAML 読み込み時の解析例外が発生すると、コンパイル時エラーが発生します。

現在の XAML ドキュメントの既定の XAML 名前空間にない静的フィールドまたはプロパティへの x:Static 参照を作成できます。ただし、これにはプレフィックス マッピングが必要です。 XAML 名前空間は、ほとんどの場合、XAML ドキュメントのルート要素で定義されます。

静的プロパティの参照操作は、既定の XAML スキーマ コンテキストで実行されている場合に、.NET XAML Services とその XAML リーダーと XAML ライターによって実行できます。 この XAML スキーマ コンテキストでは、CLR リフレクションを使用して、オブジェクト グラフの構築に必要な静的値を提供できます。 指定する typeName は実際には CLR 型名ではなく XAML 型名ですが、既定の XAML スキーマ コンテキストを使用する場合、または既存のすべての CLR ベースの XAML 実装フレームワークを使用する場合は基本的に同じ名前です。

プロパティの値の型 x:Static 直接ではない参照を行う場合は、注意が必要です。 XAML 処理シーケンスでは、マークアップ拡張機能から指定された値は、追加の値変換を呼び出しません。 これは、x:Static 参照によってテキスト文字列が作成され、テキスト文字列に基づく属性値の値変換は、通常、その特定のメンバーまたは戻り値の型のメンバー値に対して行われます。

属性構文は、このマークアップ拡張で使用される最も一般的な構文です。 x:Static 識別子文字列の後に指定された文字列トークンは、基になる StaticExtension 拡張クラスの Member 値として割り当てられます。

技術的に可能な他の 2 つの XAML 使用法があります。 ただし、これらの使用法は不必要に冗長であるため、あまり一般的ではありません。

  1. オブジェクト要素の構文。

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. 初期化文字列の明示的な Member プロパティを持つ属性構文。

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

.NET XAML サービスの実装では、このマークアップ拡張機能の処理は、StaticExtension クラスによって定義されます。

x:Static はマークアップ拡張機能です。 XAML のすべてのマークアップ拡張では、属性構文で { 文字と } 文字が使用されます。これは、マークアップ拡張機能が値を提供する必要があることを XAML プロセッサが認識する規則です。 マークアップ拡張機能の詳細については、「XAML のマークアップ拡張機能の概要」を参照してください。

WPF の使用に関する注意事項

WPF プログラミングに使用する既定の XAML 名前空間には多くの便利な静的プロパティが含まれていません。便利な静的プロパティのほとんどは、{x:Static} を必要とせずに使用を容易にする型コンバーターなどのサポートを持っています。 静的プロパティの場合、次のいずれかが当てはまる場合は、XAML 名前空間のプレフィックスをマップする必要があります。

  • WPF に存在するが、WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation) の既定の XAML 名前空間の一部ではない型を参照している。 これは、x:Staticを使用するための非常に一般的なシナリオです。 たとえば、Environment クラスの静的プロパティを参照するために、System CLR 名前空間と mscorlib アセンブリへの XAML 名前空間マッピングで x:Static 参照を使用できます。

  • カスタム アセンブリから型を参照しています。

  • WPF アセンブリに存在する型を参照していますが、その型は WPF の既定の XAML 名前空間の一部としてマップされていない CLR 名前空間内にあります。 WPF の既定の XAML 名前空間への CLR 名前空間のマッピングは、さまざまな WPF アセンブリの定義によって実行されます (この概念の詳細については、「XAML 名前空間と WPF XAMLの名前空間マッピング」を参照してください)。 マップされていない CLR 名前空間は、その CLR 名前空間が、通常は XAML を対象としていないクラス定義 (System.Windows.Threadingなど) で構成されている場合に存在する可能性があります。

WPF にプレフィックスと XAML 名前空間を使用する方法の詳細については、「WPF XAMLの XAML 名前空間と名前空間マッピング する」を参照してください。

関連項目