이 문서에서는 기본이 아닌 생성자에 인수를 전달하고, 팩터리 메서드를 호출하고, 제네릭 인수의 형식을 지정하는 데 사용할 수 있는 XAML 특성을 사용하는 방법을 보여 줍니다.
개요
인수가 필요한 생성자를 사용하거나 정적 생성 메서드를 호출하여 개체를 인스턴스화해야 하는 경우가 많습니다. 이 작업은 다음과 같은 특성을 사용하여 XAML에서 x:Arguments x:FactoryMethod 수행할 수 있습니다.
- 이
x:Arguments특성은 기본이 아닌 생성자 또는 팩터리 메서드 개체 선언에 대한 생성자 인수를 지정하는 데 사용됩니다. 자세한 내용은 생성자 인수 전달을 참조 하세요. - 이
x:FactoryMethod특성은 개체를 초기화하는 데 사용할 수 있는 팩터리 메서드를 지정하는 데 사용됩니다. 자세한 내용은 팩터리 메서드 호출을 참조 하세요.
또한 x:TypeArguments 특성을 사용하여 제네릭 형식의 생성자에 대한 제네릭 형식 인수를 지정할 수 있습니다. 자세한 내용은 제네릭 형식 인수 지정을 참조하세요.
생성자 인수 전달
특성을 사용하여 기본이 아닌 생성자에 인수를 x:Arguments 전달할 수 있습니다. 각 생성자 인수는 인수의 형식을 나타내는 XML 요소 내에서 구분되어야 합니다. Xamarin.Forms 는 기본 형식에 대해 다음 요소를 지원합니다.
x:Arrayx:Booleanx:Bytex:Charx:DateTimex:Decimalx:Doublex:Int16x:Int32x:Int64x:Objectx:Singlex:Stringx:TimeSpan
다음 코드 예제에서는 3개의 Color 생성자와 함께 특성을 사용하는 x:Arguments 방법을 보여 줍니다.
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Double>0.9</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Double>0.25</x:Double>
<x:Double>0.5</x:Double>
<x:Double>0.75</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Double>0.8</x:Double>
<x:Double>0.5</x:Double>
<x:Double>0.2</x:Double>
<x:Double>0.5</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
태그 내 x:Arguments 의 요소 수와 이러한 요소의 형식은 생성자 중 Color 하나와 일치해야 합니다. 단일 매개 변수가 있는 생성자에는 Color 0(검정)에서 1(흰색)의 회색조 값이 필요합니다. 세 개의 매개 변수가 있는 생성자에는 Color 0에서 1 사이의 빨간색, 녹색 및 파란색 값이 필요합니다. Color 네 개의 매개 변수가 있는 생성자는 알파 채널을 네 번째 매개 변수로 추가합니다.
다음 스크린샷은 지정된 인수 값을 사용하여 각 Color 생성자를 호출한 결과를 보여 줍니다.

팩터리 메서드 호출
특성을 사용하여 메서드의 이름과 특성을 사용하는 x:FactoryMethod 인수를 지정하여 XAML에서 팩터리 메서드를 호출할 x:Arguments 수 있습니다. 팩터리 메서드는 메서드를 public static 정의하는 클래스 또는 구조체와 동일한 형식의 개체 또는 값을 반환하는 메서드입니다.
구조체는 Color 여러 팩터리 메서드를 정의하며, 다음 코드 예제에서는 세 가지 메서드를 호출하는 방법을 보여 줍니다.
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromRgba">
<x:Arguments>
<x:Int32>192</x:Int32>
<x:Int32>75</x:Int32>
<x:Int32>150</x:Int32>
<x:Int32>128</x:Int32>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromHsla">
<x:Arguments>
<x:Double>0.23</x:Double>
<x:Double>0.42</x:Double>
<x:Double>0.69</x:Double>
<x:Double>0.7</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150" WidthRequest="150" HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromHex">
<x:Arguments>
<x:String>#FF048B9A</x:String>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
태그 내 x:Arguments 의 요소 수와 이러한 요소의 형식은 호출되는 팩터리 메서드의 인수와 일치해야 합니다. 팩터리 메서드에는 FromRgba 각각 0에서 255 사이의 빨강, 녹색, 파랑 및 알파 값을 나타내는 네 개의 Int32 매개 변수가 필요합니다. 팩터리 메서드에는 FromHsla 각각 0에서 1까지의 색조, 채도, 광도 및 알파 값을 나타내는 네 개의 Double 매개 변수가 필요합니다. 팩터리 메서드에는 FromHex 16진수(A)RGB 색을 나타내는 값이 필요합니다 String .
다음 스크린샷은 지정된 인수 값을 사용하여 각 Color 팩터리 메서드를 호출한 결과를 보여 줍니다.

제네릭 형식 인수 지정
다음 코드 예제에 설명된 대로 특성을 사용하여 x:TypeArguments 제네릭 형식의 생성자에 대한 제네릭 형식 인수를 지정할 수 있습니다.
<ContentPage ...>
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android" Value="5, 10" />
<On Platform="UWP" Value="10" />
</OnPlatform>
</StackLayout.Margin>
</StackLayout>
</ContentPage>
클래스는 OnPlatform 제네릭 클래스이며 대상 형식과 일치하는 특성으로 x:TypeArguments 인스턴스화해야 합니다. 클래스에서 On 특성은 Platform 단일 string 값 또는 여러 쉼표로 구분된 string 값을 허용할 수 있습니다. 이 예제에서는 속성이 StackLayout.Margin 플랫폼별 Thickness으로 설정됩니다.
제네릭 형식 인수에 대한 자세한 내용은 XAML의 제네릭을 Xamarin.Forms 참조하세요.