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 XAML 处理器调用来初始化指定为 object 的实例的方法的字符串方法名称。 请参阅“备注”。
oneOrMoreObjectElements 指定工厂方法参数的对象的一个或多个对象元素。 顺序很重要,它表示应将参数传递给工厂方法的顺序。

备注

如果 methodname 是一个实例方法,则无法限定它。

支持将静态方法作为工厂方法。 如果 methodname 是一个静态方法,则 methodname 作为 typeName.methodName 组合提供,其中 typeName 命名定义静态工厂方法的类。 如果引用映射的 xmlns 中的类型,typeName 可以是前缀限定的。 typeName 可以是与 typeof(object) 不同的类型。

工厂方法必须是支持相关对象元素的类型的声明的公共方法。

工厂方法必须返回一个可分配给相关对象的实例。 工厂方法不应返回 null。

x:Arguments 根据与工厂方法签名的最佳匹配原则进行操作。 匹配首先计算参数计数。 如果参数计数有多个可能的匹配项,则计算参数类型并确定最佳匹配。 如果在此计算阶段之后仍存在歧义,则 XAML 处理器的行为是未定义的。

x:FactoryMethod 元素用法不是典型意义上的属性元素用法,因为指令标记不引用包含的对象元素的类型。 预计元素用法不像属性用法那么常见。 x:Arguments(属性或元素用法)可以与 x:FactoryMethod 元素用法一起使用,但在“用法”部分中没有特别说明这一点。

x:FactoryMethod 作为元素必须位于任何其他属性元素之前,必须位于任何作为元素提供的 x:Arguments 之前,并且必须位于任何内容/内部文本/初始化文本之前。

另请参阅