Condividi tramite


Passaggio di argomenti

Spesso è necessario creare un'istanza di oggetti con costruttori che richiedono argomenti o chiamando un metodo di creazione statica. A tale scopo, è possibile usare gli attributi e x:FactoryMethod nell'interfaccia x:Arguments utente dell'app multipiattaforma .NET (.NET MAUI):

  • L'attributo x:Arguments viene usato per specificare gli argomenti del costruttore per un costruttore non predefinito o per una dichiarazione di oggetto metodo factory. Per altre informazioni, vedere Passare gli argomenti del costruttore.
  • L'attributo x:FactoryMethod viene utilizzato per specificare un metodo factory che può essere utilizzato per inizializzare un oggetto . Per altre informazioni, vedere Chiamare i metodi factory.

Inoltre, l'attributo x:TypeArguments può essere usato per specificare gli argomenti di tipo generico per il costruttore di un tipo generico. Per altre informazioni, vedere Specificare un argomento di tipo generico.

Gli argomenti possono essere passati ai costruttori e ai metodi factory usando le primitive del linguaggio XAML .NET MAUI seguenti:

  • x:Array, che corrisponde a Array.
  • x:Boolean, che corrisponde a Boolean.
  • x:Byte, che corrisponde a Byte.
  • x:Char, che corrisponde a Char.
  • x:DateTime, che corrisponde a DateTime.
  • x:Decimal, che corrisponde a Decimal.
  • x:Double, che corrisponde a Double.
  • x:Int16, che corrisponde a Int16.
  • x:Int32, che corrisponde a Int32.
  • x:Int64, che corrisponde a Int64.
  • x:Object, che corrisponde all'oggetto Object.
  • x:Single, che corrisponde a Single.
  • x:String, che corrisponde a String.
  • x:TimeSpan, che corrisponde a TimeSpan.

Ad eccezione di x:DateTime, le altre primitive del linguaggio si trovano nella specifica XAML 2009.

Nota

La primitiva del x:Single linguaggio può essere usata per passare float argomenti.

Passare argomenti del costruttore

Gli argomenti possono essere passati a un costruttore non predefinito usando l'attributo x:Arguments . Ogni argomento del costruttore deve essere delimitato all'interno di un elemento XML che rappresenta il tipo dell'argomento.

L'esempio seguente illustra l'uso dell'attributo x:Arguments con tre costruttori diversi Color :

<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>

Il numero di elementi all'interno del x:Arguments tag e i tipi di questi elementi devono corrispondere a uno dei Color costruttori. Il Color costruttore con un singolo parametro richiede un valore in scala float di grigi compreso tra 0 (nero) e 1 (bianco). Il Color costruttore con tre parametri richiede float valori rosso, verde e blu compresi tra 0 e 1. Il Color costruttore con quattro parametri aggiunge un float canale alfa come quarto parametro.

Chiamare i metodi factory

I metodi factory possono essere chiamati in XAML MAUI .NET specificando il nome del metodo usando l'attributo x:FactoryMethod e i relativi argomenti usando l'attributo x:Arguments . Un metodo factory è un public static metodo che restituisce oggetti o valori dello stesso tipo della classe o della struttura che definisce i metodi.

La Color classe definisce una serie di metodi factory e l'esempio seguente illustra la chiamata di tre metodi:

<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>

Il numero di elementi all'interno del x:Arguments tag e i tipi di questi elementi devono corrispondere agli argomenti del metodo factory chiamato. Il FromRgba metodo factory richiede quattro byte argomenti, che rappresentano rispettivamente i valori rosso, verde, blu e alfa, compresi tra 0 e 255. Il FromHsla metodo factory richiede quattro float argomenti, che rappresentano rispettivamente la tonalità, la saturazione, la luminosità e i valori alfa, compresi tra 0 e 1. Il FromHex metodo factory richiede un string argomento che rappresenta il colore RGB (A)esadecimale.

Specificare un argomento di tipo generico

È possibile specificare argomenti di tipo generico per il costruttore di un tipo generico usando l'attributo x:TypeArguments , come illustrato nell'esempio seguente:

<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>

La OnPlatform classe è una classe generica e deve essere creata un'istanza con un x:TypeArguments attributo che corrisponde al tipo di destinazione. On Nella classe l'attributo Platform può accettare un singolo string valore o più valori delimitati da string virgole. In questo esempio la StackLayout.Margin proprietà è impostata su un oggetto specifico Thicknessdella piattaforma.

Per altre informazioni sugli argomenti di tipo generico, vedi Generics in XAML.