다음을 통해 공유


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: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 프로세서에서 예외를 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>

참고 항목