Директива x:Arguments

Пакеты аргументов построения для объявления элемента объекта конструктора без параметров в XAML или для объявления объекта метода фабрики.

Использование элементов XAML (конструктор nonparameterless)

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

Использование элементов XAML (метод фабрики)

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

Значения XAML

Стоимость Description
oneOrMoreObjectElements Один или несколько элементов объекта, которые указывают аргументы, передаваемые в резервный конструктор без параметров или метод фабрики.

Обычное использование — использовать текст инициализации в элементах объекта для указания фактических значений аргументов. См. раздел "Примеры".

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

Зависимости

x:FactoryMethodможет изменить область и поведение, в котором x:Arguments применяется.

Если не x:FactoryMethod указано, x:Arguments применяется к альтернативным (не по умолчанию) подписям резервных конструкторов.

Если x:FactoryMethod задано, x:Arguments применяется к перегрузке именованного метода.

Замечания

XAML 2006 может поддерживать инициализацию по умолчанию с помощью текста инициализации. Однако практическое применение метода построения текста инициализации ограничено. Текст инициализации рассматривается как одна текстовая строка; Таким образом, он добавляет возможность только для инициализации одного параметра, если преобразователь типов не определен для поведения построения, который может анализировать пользовательские информационные элементы и пользовательские разделители из строки. Кроме того, текстовая строка логики объекта потенциально является собственным преобразователем типов синтаксического анализатора 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 сравнивает количество параметров и выбирает перегрузку с сопоставлением arity. При наличии нескольких совпадений обработчик XAML должен сравнить типы параметров на основе типов XAML предоставленных элементов объекта. Если по-прежнему существует несколько совпадений, поведение процессора XAML не определено. Если задано x:FactoryMethod , но метод не может быть разрешен, обработчик XAML должен вызвать исключение.

Использование <x:Arguments>string</x:Arguments> атрибута XAML технически возможно. Однако это не обеспечивает никаких возможностей, кроме того, что можно сделать в противном случае с помощью преобразователей текста и типов инициализации, и использование этого синтаксиса не является намерением конструктора функций метода фабрики 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>

См. также