Share via


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 は指定されたメソッドのオーバーロードに適用されます。

Remarks

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

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

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

x:Arguments で指定されている引数を使用してオブジェクトを構築する方法を決定するため、XAML プロセッサにより次のガイドラインが使用されます。 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>

関連項目