Passaggio di argomenti in XAMLPassing Arguments in XAML

Scaricare l'esempio scaricare l'esempioDownload Sample Download the sample

Questo articolo viene illustrato come utilizzare gli attributi XAML che possono essere usati per passare argomenti per i costruttori non predefiniti, per chiamare i metodi factory e per specificare il tipo di argomento generico.This article demonstrates using the XAML attributes that can be used to pass arguments to non-default constructors, to call factory methods, and to specify the type of a generic argument.

PanoramicaOverview

È spesso necessario creare un'istanza degli oggetti con costruttori che richiedono argomenti oppure chiamando un metodo di creazione statica.It's often necessary to instantiate objects with constructors that require arguments, or by calling a static creation method. Ciò può essere ottenuto in XAML utilizzando il x:Arguments e x:FactoryMethod attributi:This can be achieved in XAML by using the x:Arguments and x:FactoryMethod attributes:

  • Il x:Arguments attributo viene usato per specificare gli argomenti del costruttore per un costruttore non predefinito o per una dichiarazione dell'oggetto metodo factory.The x:Arguments attribute is used to specify constructor arguments for a non-default constructor, or for a factory method object declaration. Per altre informazioni, vedere passando gli argomenti del costruttore.For more information, see Passing Constructor Arguments.
  • Il x:FactoryMethod attributo viene utilizzato per specificare un metodo factory che può essere utilizzato per inizializzare un oggetto.The x:FactoryMethod attribute is used to specify a factory method that can be used to initialize an object. Per altre informazioni, vedere chiamata di metodi Factory.For more information, see Calling Factory Methods.

Inoltre, il x:TypeArguments attributo può essere utilizzato per specificare gli argomenti di tipo generico per il costruttore di un tipo generico.In addition, the x:TypeArguments attribute can be used to specify the generic type arguments to the constructor of a generic type. Per altre informazioni, vedere che specifica un argomento di tipo generico.For more information, see Specifying a Generic Type Argument.

Il passaggio di argomenti del costruttorePassing Constructor Arguments

Argomenti possono essere passati a un costruttore non predefinito usando la x:Arguments attributo.Arguments can be passed to a non-default constructor using the x:Arguments attribute. Ogni argomento di costruttore deve essere delimitato all'interno di un elemento XML che rappresenta il tipo dell'argomento.Each constructor argument must be delimited within an XML element that represents the type of the argument. Xamarin. Forms supporta i seguenti elementi per i tipi di base:Xamarin.Forms supports the following elements for basic types:

  • x:Object
  • x:Boolean
  • x:Byte
  • x:Int16
  • x:Int32
  • x:Int64
  • x:Single
  • x:Double
  • x:Decimal
  • x:Char
  • x:String
  • x:TimeSpan
  • x:Array
  • x:DateTime

Esempio di codice seguente viene illustrato come utilizzare il x:Arguments attributo con tre Color costruttori:The following code example demonstrates using the x:Arguments attribute with three Color constructors:

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

Il numero di elementi all'interno di x:Arguments tag e i tipi di questi elementi, devono corrispondere a uno del Color costruttori.The number of elements within the x:Arguments tag, and the types of these elements, must match one of the Color constructors. Il Color costruttore con un singolo parametro richiede un valore di scala di grigi compreso tra 0 (nero) su 1 (bianco).The Color constructor with a single parameter requires a grayscale value from 0 (black) to 1 (white). Il Color costruttore con tre parametri richiede un valore di colore rosso, verde e blu, compreso tra 0 e 1.The Color constructor with three parameters requires a red, green, and blue value ranging from 0 to 1. Il Color costruttore con quattro parametri aggiunge un canale alfa come quarto parametro.The Color constructor with four parameters adds an alpha channel as the fourth parameter.

Le schermate seguenti illustrano il risultato della chiamata ognuno Color costruttore con i valori dell'argomento specificato:The following screenshots show the result of calling each Color constructor with the specified argument values:

BoxView. Color specificato con x:Arguments

Chiamata di metodi FactoryCalling Factory Methods

I metodi factory possono essere chiamati in XAML, specificando il metodo nome utilizzando il x:FactoryMethod attributo e i relativi argomenti usando le x:Arguments attributo.Factory methods can be called in XAML by specifying the method's name using the x:FactoryMethod attribute, and its arguments using the x:Arguments attribute. Un metodo factory è un public static metodo che restituisce oggetti o valori dello stesso tipo della classe o struttura che definisce i metodi.A factory method is a public static method that returns objects or values of the same type as the class or structure that defines the methods.

Il Color struttura definisce una serie di metodi factory e il codice seguente viene illustrato chiamante tre parametri:The Color structure defines a number of factory methods, and the following code example demonstrates calling three of them:

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

Il numero di elementi all'interno di x:Arguments tag e i tipi di questi elementi, devono corrispondere gli argomenti del metodo factory viene chiamato.The number of elements within the x:Arguments tag, and the types of these elements, must match the arguments of the factory method being called. Il FromRgba metodo factory richiede quattro Int32 parametri, che rappresentano i valori rossi, verdi, blu e alfa, compreso tra 0 e 255 rispettivamente.The FromRgba factory method requires four Int32 parameters, which represent the red, green, blue, and alpha values, ranging from 0 to 255 respectively. Il FromHsla metodo factory richiede quattro Double parametri, che rappresentano la tonalità, saturazione, luminosità e i valori alfa, compreso tra 0 e 1 rispettivamente.The FromHsla factory method requires four Double parameters, which represent the hue, saturation, luminosity, and alpha values, ranging from 0 to 1 respectively. Il FromHex metodo factory richiede un String che rappresenta il formato esadecimale (A) colore RGB.The FromHex factory method requires a String that represents the hexadecimal (A)RGB color.

Le schermate seguenti illustrano il risultato della chiamata ognuno Color metodo factory con i valori di argomento specificato:The following screenshots show the result of calling each Color factory method with the specified argument values:

BoxView. Color specificato con x:FactoryMethod e x:Arguments

Se si specifica un argomento tipo genericoSpecifying a Generic Type Argument

Argomenti di tipo generico per il costruttore di un tipo generico possono essere specificati utilizzando il x:TypeArguments attributo, come illustrato nell'esempio di codice seguente:Generic type arguments for the constructor of a generic type can be specified using the x:TypeArguments attribute, as demonstrated in the following code example:

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

Il OnPlatform classe è una classe generica e deve essere creata un'istanza con un x:TypeArguments attributo che corrisponde al tipo di destinazione.The OnPlatform class is a generic class and must be instantiated with an x:TypeArguments attribute that matches the target type. Nel On (classe), il Platform attributo può accettare un singolo string valore o più valori delimitati da virgole string valori.In the On class, the Platform attribute can accept a single string value, or multiple comma-delimited string values. In questo esempio, il StackLayout.Margin è impostata su una specifica della piattaforma Thickness .In this example, the StackLayout.Margin property is set to a platform-specific Thickness.

RiepilogoSummary

L'articolo descrive gli attributi XAML può essere usato per passare argomenti per i costruttori non predefiniti, per chiamare i metodi factory e per specificare il tipo di argomento generico.This article demonstrated using the XAML attributes that can be used to pass arguments to non-default constructors, to call factory methods, and to specify the type of a generic argument.