x:FactoryMethod ディレクティブ

バッキング型を解決した後に、XAML プロセッサでオブジェクトを初期化するために使用する必要があるコンストラクター以外のメソッドを指定します。

XAML 属性の使用、x:Arguments なし

<object x:FactoryMethod="methodname"...>  
  ...  
</object>  

XAML 属性の使用、要素としての x:Arguments

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

XAML 値

説明
methodname object として指定されたインスタンスを初期化するために XAML プロセッサで呼び出すメソッドの文字列メソッド名。 「解説」を参照してください。
oneOrMoreObjectElements ファクトリ メソッドのパラメーターを指定するオブジェクトの 1 つ以上のオブジェクト要素。 順序は重要です。それは引数をファクトリ メソッドに渡す順序を示します。

Remarks

methodname がインスタンス メソッドの場合、修飾することはできません。

ファクトリ メソッドとしての静的メソッドがサポートされています。 methodname が静的メソッドである場合、methodnametypeName.methodName の組み合わせとして提供されます。ここで、typeName では、静的ファクトリ メソッドを定義するクラスの名前を指定します。 typeName は、マップされた xmlns 内の型を参照する場合、プレフィックスで修飾できます。 typeName は、typeof(object) と異なる型も可能です。

ファクトリ メソッドは、関連するオブジェクト要素をバッキングする型の宣言されたパブリック メソッドである必要があります。

ファクトリ メソッドでは、関連するオブジェクトに割り当て可能なインスタンスを返す必要があります。 ファクトリ メソッドで null を返すことはできません。

x:Arguments は、ファクトリ メソッドのシグネチャに最適な原則を使用して動作します。 照合では、最初にパラメーター数が評価されます。 パラメーターの数と一致する候補が複数ある場合は、パラメーターの型が評価され、最適な一致が決定されます。 この評価フェーズの後もあいまいさが残っている場合、XAML プロセッサの動作は未定義です。

x:FactoryMethod 要素の使用は、一般的な意味では、プロパティ要素の使用ではありません。これは、ディレクティブ マークアップでは、包含するオブジェクト要素の型が参照されないためです。 要素の使用が属性の使用よりも一般的でないことが想定されています。 x:Arguments (属性または要素の使用) を x:FactoryMethod 要素と共に使用できますが、これは使用方法のセクションでは特に示されていません。

要素としての x:FactoryMethod は、他のプロパティ要素に先行する必要があり、同様に要素として指定される x:Arguments に先行する必要があり、コンテンツ/内部テキスト/初期化テキストに先行する必要があります。

関連項目