XAML에서 인수 전달
이 문서에서는 기본이 아닌 생성자에 인수를 전달하고, 팩터리 메서드를 호출하고, 제네릭 인수의 형식을 지정하는 데 사용할 수 있는 XAML 특성을 사용하는 방법을 보여 줍니다.
개요
인수가 필요한 생성자를 사용하거나 정적 생성 메서드를 호출하여 개체를 인스턴스화해야 하는 경우가 많습니다. 이 작업은 다음과 같은 특성을 사용하여 XAML에서 x:Arguments
x:FactoryMethod
수행할 수 있습니다.
- 이
x:Arguments
특성은 기본이 아닌 생성자 또는 팩터리 메서드 개체 선언에 대한 생성자 인수를 지정하는 데 사용됩니다. 자세한 내용은 생성자 인수 전달을 참조 하세요. - 이
x:FactoryMethod
특성은 개체를 초기화하는 데 사용할 수 있는 팩터리 메서드를 지정하는 데 사용됩니다. 자세한 내용은 팩터리 메서드 호출을 참조 하세요.
또한 x:TypeArguments
특성을 사용하여 제네릭 형식의 생성자에 대한 제네릭 형식 인수를 지정할 수 있습니다. 자세한 내용은 제네릭 형식 인수 지정을 참조하세요.
생성자 인수 전달
특성을 사용하여 기본이 아닌 생성자에 인수를 x:Arguments
전달할 수 있습니다. 각 생성자 인수는 인수의 형식을 나타내는 XML 요소 내에서 구분되어야 합니다. Xamarin.Forms 는 기본 형식에 대해 다음 요소를 지원합니다.
x:Array
x:Boolean
x:Byte
x:Char
x:DateTime
x:Decimal
x:Double
x:Int16
x:Int32
x:Int64
x:Object
x:Single
x:String
x: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 참조하세요.