引数を渡す

多くの場合、引数を必要とするコンストラクターを使用するか、静的作成メソッドを呼び出してオブジェクトをインスタンス化する必要があります。 これは、.NET マルチプラットフォーム アプリ UI (.NET MAUI) XAML で、x:FactoryMethod および x:Arguments 属性を使用して実行できます。

  • x:Arguments 属性は、既定以外のコンストラクターまたはファクトリ メソッド オブジェクト宣言のコンストラクター引数を指定するために使用されます。 詳細については、「コンストラクター引数を渡す」を参照してください。
  • x:FactoryMethod 属性は、オブジェクトの初期化に使用できるファクトリ メソッドを指定するために使用されます。 詳細については、「ファクトリ メソッドを呼び出す」を参照してください。

さらに、x:TypeArguments 属性を使用して、ジェネリック型のコンストラクターにジェネリック型引数を指定できます。 詳細については、「ジェネリック型引数の指定」を参照してください。

引数は、次の .NET MAUI XAML 言語プリミティブを使用して、コンストラクターとファクトリ メソッドに渡すことができます:

  • x:ArrayArray に対応します。
  • x:BooleanBoolean に対応します。
  • x:ByteByte に対応します。
  • x:CharChar に対応します。
  • x:DateTimeDateTime に対応します。
  • x:DecimalDecimal に対応します。
  • x:DoubleDouble に対応します。
  • x:Int16Int16 に対応します。
  • x:Int32Int32 に対応します。
  • x:Int64Int64 に対応します。
  • x:ObjectObject に対応します
  • x:SingleSingle に対応します。
  • x:StringString に対応します。
  • x:TimeSpanTimeSpan に対応します。

x:DateTime を除き、他の言語プリミティブは XAML 2009 仕様に含まれています。

x:Single 言語プリミティブを使用して float 引数を渡すことができます。

コンストラクター引数を渡す

引数は、x:Arguments 属性を使用して既定以外のコンストラクターに渡すことができます。 各コンストラクター引数は、引数の型を表す XML 要素内で区切る必要があります。

次の例では、3 つの異なるColorコンストラクターで x:Arguments 属性を使用する方法を示しています。

<BoxView HeightRequest="150"
         WidthRequest="150"
         HorizontalOptions="Center">
    <BoxView.Color>
        <Color>
            <x:Arguments>
                <x:Single>0.9</x:Single>
            </x:Arguments>
        </Color>
    </BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
         WidthRequest="150"
         HorizontalOptions="Center">
    <BoxView.Color>
        <Color>
            <x:Arguments>
                <x:Single>0.25</x:Single>
                <x:Single>0.5</x:Single>
                <x:Single>0.75</x:Single>
            </x:Arguments>
        </Color>
    </BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
         WidthRequest="150"
         HorizontalOptions="Center">
    <BoxView.Color>
        <Color>
            <x:Arguments>
                <x:Single>0.8</x:Single>
                <x:Single>0.5</x:Single>
                <x:Single>0.2</x:Single>
                <x:Single>0.5</x:Single>
            </x:Arguments>
        </Color>
    </BoxView.Color>
</BoxView>

x:Arguments タグ内の要素の数とこれらの要素の型は、Color コンストラクターのいずれかと一致する必要があります。 パラメーターが 1 つの Color コンストラクターには、0 (黒) から 1 (白) までのグレースケール float 値が必要です。 3 つのパラメーターがある Color コンストラクターには、0 から 1 までの float 赤、緑、青の値が必要です。 4 つのパラメーターがある Color コンストラクターは、4 番目のパラメーターとして float アルファ チャネルを追加します。

ファクトリ メソッドを呼び出す

ファクトリ メソッドは、x:FactoryMethod 属性を使用してメソッドの名前を指定し、x:Arguments 属性を使用してその引数を指定することで、.NET MAUI XAML で呼び出すことができます。 ファクトリ メソッドは、定義するクラスまたは構造と同じ型のオブジェクトまたは値を返す public static メソッドです。

Color クラスでは多くのファクトリ メソッドを定義します。次の例では、そのうちの 3 つを呼び出しています。

<BoxView HeightRequest="150"
         WidthRequest="150"
         HorizontalOptions="Center">
  <BoxView.Color>
    <Color x:FactoryMethod="FromRgba">
      <x:Arguments>
        <x:Byte>192</x:Byte>
        <x:Byte>75</x:Byte>
        <x:Byte>150</x:Byte>
        <x:Byte>128</x:Byte>
      </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 ファクトリ メソッドでは 4 つの byte 引数が必要で、それぞれ 0 ~ 255 の範囲で赤、緑、青、およびアルファ値を表します。 FromHsla ファクトリ メソッドでは 4 つの float 引数が必要で、それぞれ 0 ~ 1 の範囲で色調、彩度、光度、およびアルファ値を表します。 FromHex ファクトリ メソッドでは、16 進数 (A) RGB 色を表す 1 つの string 引数が必要です。

ジェネリック型引数を指定する

次の例に示すように、ジェネリック型のコンストラクターのジェネリック型引数は、x:TypeArguments 属性を使用して指定できます。

<StackLayout>
    <StackLayout.Margin>
        <OnPlatform x:TypeArguments="Thickness">
          <On Platform="iOS" Value="0,20,0,0" />
          <On Platform="Android" Value="5, 10" />
        </OnPlatform>
    </StackLayout.Margin>
</StackLayout>

OnPlatform クラスはジェネリック クラスであり、対象の型と一致する x:TypeArguments 属性を使用してインスタンス化する必要があります。 On クラスで、Platform 属性は 1 つのstring値または複数のコンマ区切りstring 値を受け取ることができます。 この例では、StackLayout.Margin プロパティはプラットフォーム固有 Thickness に設定されています。

ジェネリック型引数の詳細については、「 XAML のジェネリック」を参照してください。