Condividi tramite


Passaggio di argomenti

Spesso è necessario creare un'istanza di oggetti utilizzando i costruttori che necessitano di argomenti oppure chiamando un metodo di creazione statica. Per raggiungere questo obiettivo in .NET Multi-platform App UI (.NET MAUI) XAML, è possibile usare gli attributi x:Arguments e x:FactoryMethod.

  • 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 ulteriori informazioni, vedere Metodi factory delle chiamate.

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

Annotazioni

La primitiva linguistica x:Single 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 di scala di grigi float 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 di fabbrica richiede un string argomento che rappresenta il colore (A)RGB 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 istanziata con un attributo x:TypeArguments che corrisponde al tipo di riferimento. 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 una Thickness specifica della piattaforma.

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