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
コンストラクターのいずれかと一致する必要があります。 1 つのパラメーターを持つ Color
構造体 には、0 (黒) から 1 (白) までのグレースケール値が必要です。 3 つのパラメーターを持つ Color
構造体 には、0 から 1 までの赤、緑、青の値が必要です。 4 つのパラメーターを持つ Color
構造体 は、4 番目のパラメーターとしてアルファ チャネルを追加します。
次のスクリーンショットは、指定した引数値を使用して各 Color
コンストラクターを呼び出した結果を示しています。
ファクトリ メソッドの呼び出し
ファクトリ メソッドは、x:FactoryMethod
属性を使用してメソッドの名前を指定し、x:Arguments
属性を使用してその引数を指定することで、XAML 内で呼び出すことができます。 ファクトリ メソッドは、定義するクラスまたは構造と同じ型のオブジェクトまたは値を返す public static
メソッドです。
Color
構造体は、いくつかのファクトリ メソッドを定義します。次のコード例は、そのうちの 3 つを呼び出す例を示しています。
<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 の範囲の赤、緑、青、アルファの値を表す 4 つの Int32
パラメーターが必要です。 FromHsla
ファクトリ メソッドには、それぞれ 0 から 1 の範囲の色相、彩度、明度、アルファの値を表す 4 つの 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
属性は 1 つのstring
値または複数のコンマ区切りstring
値を受け取ることができます。 この例では、StackLayout.Margin
プロパティはプラットフォーム固有 Thickness
に設定されています。
ジェネリック型引数の詳細については、「Xamarin.Forms XAML のジェネリック」を参照してください。