x:Arguments 지시문

XAML의 매개 변수 없는 생성자가 아닌 개체 요소 선언 또는 팩터리 메서드 개체 선언에 대한 생성 인수를 패키지합니다.

XAML 요소 사용량(매개 변수 없는 생성자)

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

XAML 요소 사용량(팩터리 메서드)

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

XAML 값

설명
oneOrMoreObjectElements 매개 변수가 없는 백업 생성자가 아닌 메서드 또는 팩터리 메서드에 전달할 인수를 지정하는 하나 이상의 개체 요소입니다.

일반적인 사용법은 개체 요소 내에서 초기화 텍스트를 사용하여 실제 인수 값을 지정하는 것입니다. 예제 섹션을 참조하세요.

요소의 순서가 중요합니다. XAML 형식 순서는 백업 생성자 또는 팩터리 메서드 오버로드의 형식 및 형식 순서와 일치해야 합니다.
methodName x:Arguments 인수를 처리해야 하는 팩터리 메서드의 이름입니다.

종속성

x:FactoryMethodx:Arguments가 적용되는 범위 및 동작을 수정할 수 있습니다.

x:FactoryMethod가 지정되지 않을 경우 x:Arguments가 백업 생성자의 대체(기본이 아닌) 서명에 적용됩니다.

x:FactoryMethod가 지정된 경우 x:Arguments가 명명된 메서드의 오버로드에 적용됩니다.

설명

XAML 2006은 초기화 텍스트를 통해 기본값이 아닌 초기화를 지원할 수 있습니다. 그러나 초기화 텍스트 생성 기술의 실제 적용은 제한적입니다. 초기화 텍스트는 단일 텍스트 문자열로 처리됩니다. 따라서 문자열에서 사용자 지정 정보 항목 및 사용자 지정 구분 기호를 구문 분석할 수 있는 생성 동작에 대해 형식 변환기가 정의되지 않는 한 단일 매개 변수 초기화에 대한 기능만 추가합니다. 또한 개체 논리에 대한 텍스트 문자열은 true 문자열이 아닌 기본 형식을 처리하기 위해 지정된 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 프로세서가 예외를 throw해야 합니다.

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>

참고 항목