Share via


Passage d’arguments en XAML

Cet article montre comment utiliser les attributs XAML qui peuvent être utilisés pour passer des arguments à des constructeurs non par défaut, appeler des méthodes de fabrique et spécifier le type d’un argument générique.

Vue d’ensemble

Il est souvent nécessaire d’instancier des objets avec des constructeurs qui nécessitent des arguments ou en appelant une méthode de création statique. Cela peut être obtenu en XAML à l’aide des attributs et x:FactoryMethod des x:Arguments attributs :

  • L’attribut x:Arguments est utilisé pour spécifier des arguments de constructeur pour un constructeur non par défaut ou pour une déclaration d’objet de méthode de fabrique. Pour plus d’informations, consultez Passage d’arguments de constructeur.
  • L’attribut x:FactoryMethod est utilisé pour spécifier une méthode de fabrique qui peut être utilisée pour initialiser un objet. Pour plus d’informations, consultez Appeler les méthodes d’usine.

En outre, l’attribut x:TypeArguments peut être utilisé pour spécifier les arguments de type générique au constructeur d’un type générique. Pour plus d’informations, consultez Spécification d’un argument de type générique.

Passage d’arguments de constructeur

Les arguments peuvent être passés à un constructeur non par défaut à l’aide de l’attribut x:Arguments . Chaque argument de constructeur doit être délimité dans un élément XML qui représente le type de l’argument. Xamarin.Forms prend en charge les éléments suivants pour les types de base :

  • 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

L’exemple de code suivant illustre l’utilisation de l’attribut x:Arguments avec trois Color constructeurs :

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

Le nombre d’éléments dans la x:Arguments balise et les types de ces éléments doit correspondre à l’un des Color constructeurs. Le Colorconstructeur avec un seul paramètre nécessite une valeur de nuances de gris comprise entre 0 (noir) et 1 (blanc). Le Colorconstructeur avec trois paramètres nécessite une valeur rouge, verte et bleue comprise entre 0 et 1. Le Colorconstructeur avec quatre paramètres ajoute un canal alpha comme quatrième paramètre.

Les captures d’écran suivantes montrent le résultat de l’appel de chaque Color constructeur avec les valeurs d’argument spécifiées :

BoxView.Color spécifié avec x :Arguments

Appels de méthodes de fabrique

Les méthodes de fabrique peuvent être appelées en XAML en spécifiant le nom de la méthode à l’aide de l’attribut x:FactoryMethod et ses arguments à l’aide de l’attribut x:Arguments . Une méthode de fabrique est une public static méthode qui retourne des objets ou des valeurs du même type que la classe ou la structure qui définit les méthodes.

La Color structure définit un certain nombre de méthodes de fabrique, et l’exemple de code suivant illustre l’appel de trois d’entre eux :

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

Le nombre d’éléments dans la x:Arguments balise, ainsi que les types de ces éléments, doit correspondre aux arguments de la méthode de fabrique appelée. La FromRgba méthode de fabrique nécessite quatre Int32 paramètres, qui représentent respectivement les valeurs rouge, vert, bleu et alpha, allant de 0 à 255. La FromHsla méthode de fabrique nécessite quatre Double paramètres, qui représentent respectivement la teinte, la saturation, la luminosité et les valeurs alpha, allant de 0 à 1. La FromHex méthode de fabrique nécessite une String valeur qui représente la couleur RVB hexadécimale (A)..

Les captures d’écran suivantes montrent le résultat de l’appel de chaque Color méthode de fabrique avec les valeurs d’argument spécifiées :

BoxView.Color spécifié avec x :FactoryMethod et x :Arguments

Spécification d’un argument de type générique

Les arguments de type générique pour le constructeur d’un type générique peuvent être spécifiés à l’aide de l’attribut x:TypeArguments , comme illustré dans l’exemple de code suivant :

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

La OnPlatform classe est une classe générique et doit être instanciée avec un x:TypeArguments attribut qui correspond au type cible. Dans la On classe, l’attribut Platform peut accepter une valeur unique string ou plusieurs valeurs délimitées par des virgules string . Dans cet exemple, la StackLayout.Margin propriété est définie sur une plateforme spécifique Thicknessà la plateforme.

Pour plus d’informations sur les arguments de type générique, consultez Generics in Xamarin.Forms XAML.