Présentation des Xamarin.Forms styles
Les styles permettent de personnaliser l’apparence des éléments visuels. Les styles sont définis pour un type spécifique et contiennent des valeurs pour les propriétés disponibles sur ce type.
Xamarin.Forms Les applications contiennent souvent plusieurs contrôles qui ont une apparence identique. Par exemple, une application peut avoir plusieurs Label
instances qui ont les mêmes options de police et options de disposition, comme illustré dans l’exemple de code XAML suivant :
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Styles.NoStylesPage"
Title="No Styles"
IconImageSource="xaml.png">
<ContentPage.Content>
<StackLayout Padding="0,20,0,0">
<Label Text="These labels"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
<Label Text="are not"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
<Label Text="using styles"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
L’exemple de code suivant montre la page équivalente créée en C# :
public class NoStylesPageCS : ContentPage
{
public NoStylesPageCS ()
{
Title = "No Styles";
IconImageSource = "csharp.png";
Padding = new Thickness (0, 20, 0, 0);
Content = new StackLayout {
Children = {
new Label {
Text = "These labels",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
},
new Label {
Text = "are not",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
},
new Label {
Text = "using styles",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
}
}
};
}
}
Chaque Label
instance a des valeurs de propriété identiques pour contrôler l’apparence du texte affiché par le Label
. Cela donne l’affichage illustré dans les captures d’écran suivantes :
La définition de l’apparence de chaque contrôle individuel peut être répétitive et sujette aux erreurs. Au lieu de cela, vous pouvez créer un style qui définit l’apparence, puis l’appliquer aux contrôles requis.
Créer un style
La classe Style
regroupe une collection de valeurs de propriété en un seul objet qui peut ensuite être appliqué à plusieurs instances d’éléments visuels. Cela permet de réduire le balisage répétitif et de modifier plus facilement l’apparence d’une application.
Bien que les styles aient été conçus principalement pour les applications XAML, ils peuvent également être créés en C# :
Style
Les instances créées en XAML sont généralement définies dans unResourceDictionary
qui est affecté à laResources
collection d’un contrôle, d’une page ou à laResources
collection de l’application.Style
Les instances créées en C# sont généralement définies dans la classe de la page ou dans une classe accessible globalement.
Le fait de choisir où définir Style
impacte l’emplacement où il peut être utilisé :
Style
Les instances définies au niveau du contrôle ne peuvent être appliquées qu’au contrôle et à ses enfants.Style
les instances définies au niveau de la page ne peuvent être appliquées qu’à la page et à ses enfants.- Les instances de
Style
définies au niveau de l’application peuvent être appliquées dans toute l’application.
Chaque instance de Style
contient une collection d’un ou de plusieurs objets Setter
, chaque Setter
ayant un Property
et un Value
. Property
est le nom de la propriété pouvant être liée de l’élément auquel le style est appliqué, et Value
est la valeur qui est appliquée à la propriété.
Chaque Style
instance peut être explicite ou implicite :
- Une instance explicite
Style
est définie en spécifiant uneTargetType
valeur et unex:Key
valeur, et en définissant la propriété deStyle
l’élément cible sur lax:Key
référence. Pour plus d’informations sur les styles explicites , consultez Styles explicites. - Un instance implicite
Style
est défini en spécifiant uniquement unTargetType
. LeStyle
instance est ensuite automatiquement appliqué à tous les éléments de ce type. Notez que les sous-classes du n’ontTargetType
pas automatiquement leStyle
appliqué. Pour plus d’informations sur les styles implicites , consultez Styles implicites.
Durant la création de Style
, la propriété TargetType
est toujours obligatoire. L’exemple de code suivant montre un style explicite (notez le x:Key
) créé en XAML :
<Style x:Key="labelStyle" TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="FontSize" Value="Large" />
</Style>
Pour appliquer un Style
, l’objet cible doit être un VisualElement
qui correspond à la TargetType
valeur de propriété de , Style
comme illustré dans l’exemple de code XAML suivant :
<Label Text="Demonstrating an explicit style" Style="{StaticResource labelStyle}" />
Les styles inférieurs dans la hiérarchie d’affichage sont prioritaires sur ceux définis plus haut. Par exemple, la définition d’un Style
qui définit Label.TextColor
Red
sur au niveau de l’application est remplacée par un style au niveau de la page qui définit Label.TextColor
sur Green
. De même, un style de niveau page est remplacé par un style de niveau de contrôle. En outre, si Label.TextColor
est défini directement sur une propriété de contrôle, cela est prioritaire sur tous les styles.
Les articles de cette section montrent et expliquent comment créer et appliquer des styles explicites et implicites , comment créer des styles globaux, l’héritage de style, comment répondre aux modifications de style au moment de l’exécution et comment utiliser les styles intégrés inclus dans Xamarin.Forms.
Notes
Qu’est-ce que StyleId ?
Xamarin.Forms Avant la version 2.2, la StyleId
propriété était utilisée pour identifier des éléments individuels dans une application à des fins d’identification dans les tests d’interface utilisateur et dans les moteurs de thème tels que Pixate. Toutefois, Xamarin.Forms la version 2.2 a introduit la AutomationId
propriété, qui a remplacé la StyleId
propriété.