XAML에서 인수 전달

Download Sample 샘플 다운로드

이 문서에서는 기본이 아닌 생성자에 인수를 전달하고, 팩터리 메서드를 호출하고, 제네릭 인수의 형식을 지정하는 데 사용할 수 있는 XAML 특성을 사용하는 방법을 보여 줍니다.

개요

인수가 필요한 생성자를 사용하거나 정적 생성 메서드를 호출하여 개체를 인스턴스화해야 하는 경우가 많습니다. 이 작업은 다음과 같은 특성을 사용하여 XAML에서 x:Argumentsx: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 하나와 일치해야 합니다. 단일 매개 변수가 있는 생성자에Color0(검정)에서 1(흰색)의 회색조 값이 필요합니다. 세 개의 매개 변수가 있는 생성자에Color0에서 1 사이의 빨간색, 녹색 및 파란색 값이 필요합니다. Color네 개의 매개 변수가 있는 생성자는 알파 채널을 네 번째 매개 변수로 추가합니다.

다음 스크린샷은 지정된 인수 값을 사용하여 각 Color 생성자를 호출한 결과를 보여 줍니다.

BoxView.Color specified with x:Arguments

팩터리 메서드 호출

특성을 사용하여 메서드의 이름과 특성을 사용하는 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 팩터리 메서드를 호출한 결과를 보여 줍니다.

BoxView.Color specified with x:FactoryMethod and x:Arguments

제네릭 형식 인수 지정

다음 코드 예제에 설명된 대로 특성을 사용하여 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 참조하세요.