Поделиться через


Директива 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

Стоимость Description
methodname Имя строковое метода, вызываемого процессором XAML для инициализации экземпляра, который указан как object. См. заметки.
oneOrMoreObjectElements Один или несколько элементов объектов для объектов, определяющих параметры фабричного метода. Элемент Order важен; он означает порядок передачи аргументов фабричному методу.

Замечания

Если methodname — метод экземпляра, его нельзя квалифицировать.

В качестве фабричных методов поддерживаются статические методы. Если methodname — статический метод, methodname предоставляется в виде комбинации typeName.methodName, где typeName называет класс, определяющий статический фабричный метод. Имена typeName можно уточнять с помощью префикса, если они ссылаются на тип в сопоставленных атрибутах XMLNS. Тип typeName может отличаться от типа typeof(object).

Фабричный метод должен быть объявленным открытым методом типа, который поддерживает соответствующий элемент объекта.

Фабричный метод должен возвращать экземпляр, который можно назначить соответствующему объекту. Фабричные методы никогда не должны возвращать значение NULL.

x:Arguments работает с принципом наилучшего соответствия для сигнатур фабричных методов. При сопоставлении сначала вычисляется количество параметров. Если для количества параметров возможно несколько соответствий, то вычисляется тип параметра и определяется наилучшее соответствие. Если после этого этапа оценки неоднозначность сохраняется, поведение процессора XAML не определено.

Использование элемента x:FactoryMethod не является использованием элемента свойства в обычном смысле, так как разметка директивы не ссылается на тип содержащего элемента объекта. Ожидается, что использование элементов менее распространено, чем использование атрибутов. x:Arguments (использование атрибута или элемента) можно использовать вместе с использованием элементов x:FactoryMethod, но это не показано в разделах «Использование».

Так как элемент должен предшествовать любым другим элементам свойств,x:FactoryMethod должен предшествовать любому экземпляру x:Arguments, также предоставленному в виде элемента, и должен предшествовать любому содержимому, внутреннему тексту или тексту инициализации.

См. также