次の方法で共有


x:Arguments ディレクティブ

XAML のパラメーターなしのコンストラクター オブジェクト要素宣言またはファクトリ メソッド オブジェクト宣言の構築引数をパッケージ化します。

XAML 要素の使用法 (パラメーターなしのコンストラクター)

<object ...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

XAML 要素の使用法 (ファクトリ メソッド)

<object x:FactoryMethod="methodName"...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

XAML 値

価値 形容
oneOrMoreObjectElements バッキングのパラメーターなしのコンストラクターまたはファクトリ メソッドに渡される引数を指定する 1 つ以上のオブジェクト要素。

一般的な使用方法は、オブジェクト要素内で初期化テキストを使用して、実際の引数値を指定することです。 「例」セクションを参照してください。

要素の順序は重要です。 XAML 型は、バッキング コンストラクターまたはファクトリ メソッドオーバーロードの型と型の順序と一致する必要があります。
methodName x:Arguments 引数を処理するファクトリ メソッドの名前。

依存 関係

x:FactoryMethod は、x:Arguments が適用されるスコープと動作を変更できます。

x:FactoryMethod が指定されていない場合、x:Arguments バッキング コンストラクターの代替 (既定以外) のシグネチャに適用されます。

x:FactoryMethod を指定した場合、x:Arguments 名前付きメソッドのオーバーロードに適用されます。

備考

XAML 2006 では、初期化テキストによる既定以外の初期化をサポートできます。 ただし、初期化テキスト構築手法の実際的な適用は限られています。 初期化テキストは 1 つのテキスト文字列として扱われます。そのため、文字列からカスタム情報項目とカスタム区切り記号を解析できる構築動作に対して型コンバーターが定義されていない限り、1 つのパラメーター初期化の機能のみが追加されます。 また、オブジェクト ロジックへのテキスト文字列は、true 文字列以外のプリミティブを処理するための、特定の XAML パーサーのネイティブの既定の型コンバーターである可能性があります。

ディレクティブ マークアップは、含まれているオブジェクト要素の型を参照しないため、一般的な意味では、x:Arguments XAML の使用はプロパティ要素の使用ではありません。 これは、要素がマークアップを子コンテンツの既定値以外として解釈する必要がある範囲をデマークする x:Code などの他のディレクティブと同様です。 この場合、各オブジェクト要素の XAML 型は、引数の型に関する情報を伝達します。これは XAML パーサーによって使用され、x:Arguments 使用が参照しようとしている特定のコンストラクター ファクトリ メソッドシグネチャを決定するために使用されます。

構築されるオブジェクト要素の x:Arguments は、オブジェクト要素の他のプロパティ要素、コンテンツ、内部テキスト、または初期化文字列の前に置く必要があります。 x:Arguments 内のオブジェクト要素には、その XAML 型とそのバッキング コンストラクターまたはファクトリ メソッドで許可されているように、属性と初期化文字列を含めることができます。 オブジェクトまたは引数の場合は、確立されたプレフィックス マッピングを参照することで、既定の XAML 名前空間の外部にあるカスタム XAML 型または XAML 型を指定できます。

XAML プロセッサでは、次のガイドラインを使用して、x:Arguments で指定された引数を使用してオブジェクトを構築する方法を決定します。 x:FactoryMethod が指定されている場合、情報は指定した x:FactoryMethod と比較されます (x:FactoryMethod の値はメソッド名であり、名前付きメソッドにはオーバーロードを含めることができます。 x:FactoryMethod が指定されていない場合、情報はオブジェクトのすべてのパブリック コンストラクター オーバーロードのセットと比較されます。 次に、XAML 処理ロジックはパラメーターの数を比較し、一致するアリティを持つオーバーロードを選択します。 複数の一致がある場合、XAML プロセッサは、指定されたオブジェクト要素の XAML 型に基づいてパラメーターの型を比較する必要があります。 一致するものがまだ複数ある場合、XAML プロセッサの動作は未定義です。 x:FactoryMethod が指定されていてもメソッドを解決できない場合、XAML プロセッサは例外をスローする必要があります。

XAML 属性の使用 <x:Arguments>string</x:Arguments> は技術的に可能です。 ただし、これは、初期化テキストと型コンバーターを使用して実行できる以外の機能を提供しません。この構文を使用することは、XAML 2009 ファクトリ メソッド機能の設計上の意図ではありません。

次の例は、パラメーターなしのコンストラクターシグネチャ、そのシグネチャにアクセスする x:Arguments の XAML 使用法を示しています。

public class Food {
  private string _name;
  private Int32 _calories;
  public Food(string name, Int32 calories) {
      _name=name;
      _calories=calories;
  }
}
<my:Food>
  <x:Arguments>
      <x:String>Apple</x:String>
      <x:Int32>150</x:Int32>
  </x:Arguments>
</my:Food>

次の例は、ターゲット ファクトリ メソッドシグネチャ、そのシグネチャにアクセスする x:Arguments の XAML 使用法を示しています。

public Food TryLookupFood(string name)
{
switch (name) {
  case "Apple": return new Food("Apple",150);
  case "Chocolate": return new Food("Chocolate",200);
  case "Cheese": return new Food("Cheese", 450);
  default: {return new Food(name,0);
}
}
<my:Food x:FactoryMethod="TryLookupFood">
  <x:Arguments>
      <x:String>Apple</x:String>
  </x:Arguments>
</my:Food>

関連項目