Formatieren von Apps mit XAML
.NET Multi-Platform App UI (.NET MAUI)-Apps enthalten oft mehrere Steuerelemente, die identisch dargestellt werden. Beispielsweise kann eine App mehrere Label-Instanzen haben, die dieselben Schrift- und Layout-Optionen haben:
<Label Text="These labels"
HorizontalOptions="Center"
VerticalOptions="Center"
FontSize="18" />
<Label Text="are not"
HorizontalOptions="Center"
VerticalOptions="Center"
FontSize="18" />
<Label Text="using styles"
HorizontalOptions="Center"
VerticalOptions="Center"
FontSize="18" />
In diesem Beispiel hat jedes Label-Objekt identische Eigenschaftswerte, um die Darstellung des vom Label angezeigten Textes zu steuern. Die Einstellung der Darstellung jedes einzelnen Steuerelements kann jedoch repetitiv und fehleranfällig sein. Stattdessen kann ein Stil erstellt werden, der die Darstellung definiert. Dieser Stil kann dann auf die benötigten Steuerelemente angewendet werden.
Einführung in die Stile
Eine App kann mit der Style-Klasse formatiert werden, um eine Sammlung von Eigenschaftswerten in einem Objekt zu gruppieren, das dann auf mehrere visuelle Elemente angewendet werden kann. Dies trägt dazu bei, sich wiederholende Markups zu reduzieren und die Darstellung einer App einfacher zu ändern.
Obwohl Stile in erster Linie für XAML-basierte Apps konzipiert sind, können sie auch in C# erstellt werden:
- In XAML erstellte Style-Objekte werden normalerweise in einem ResourceDictionary definiert, das der
Resources
-Auflistung eines Steuerelements, einer Seite oder derResources
-Auflistung der App zugeordnet ist. - Style-Objekte, die in C# erstellt werden, werden normalerweise in der Klasse der Seite oder in einer Klasse definiert, auf die global zugegriffen werden kann.
Die Entscheidung, wo Sie eine Style-Klasse definieren, hat Einfluss darauf, wo Sie sie verwenden können:
- Style-Instanzen, die auf der Ebene des Steuerelements definiert sind, können nur auf das Steuerelement und seine untergeordneten Elemente angewendet werden.
- Style-Instanzen, die auf der Seitenebene definiert sind, können nur auf die Seite und ihre untergeordneten Elemente angewandt werden.
- Style-Instanzen, die auf der App-Ebene definiert sind, können in der gesamten App angewendet werden.
Jedes Style-Objekt enthält eine Sammlung von einem oder mehreren Setter-Objekten, wobei jeder Setter eine Property
und eine Value
hat. Property
ist der Name der bindbaren Eigenschaft des Elements, auf das die Formatvorlage angewendet wird, und Value
ist der Wert, der auf die Eigenschaft angewendet wird.
Jedes Style-Objekt kann explizit, oder implizit sein:
- Ein explizites Style-Objekt wird durch Angeben eines
TargetType
- und einesx:Key
-Werts definiert und durch Festlegen der Eigenschaft Style des Zielelements auf den Verweisx:Key
. Weitere Informationen finden Sie unter Explizite Stile. - Ein implizites Style-Objekt wird definiert, indem nur ein
TargetType
angegeben wird. Das Style-Objekt wird dann automatisch auf alle Elemente dieses Typs angewendet. Der Style wird jedoch nicht automatisch auf die Unterklassen desTargetType
angewendet. Weitere Informationen finden Sie unter Implizite Stile.
Wenn Sie eine Style-Instanz erstellen, wird immer die Eigenschaft TargetType
benötigt. Das folgende Beispiel zeigt einen expliziten Stil:
<Style x:Key="labelStyle" TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="Center" />
<Setter Property="FontSize" Value="18" />
</Style>
Um einen Style anzuwenden, muss das Zielobjekt ein VisualElement sein, das dem TargetType
-Eigenschaftswert des Style entspricht:
<Label Text="Demonstrating an explicit style" Style="{StaticResource labelStyle}" />
In der Ansichtshierarchie haben die untergeordneten Stile Vorrang vor den übergeordneten Stilen. Zum Beispiel wird die Einstellung eines Style, der Label.TextColor
auf Red
auf der App-Ebene setzt, durch einen Stil auf Seitenebene überschrieben, der Label.TextColor
auf Green
setzt. Ebenso wird ein Stil auf Seitenebene durch einen Stil auf Steuerelementebene überschrieben. Wenn Label.TextColor
direkt auf eine Steuerelementeigenschaft gesetzt wird, hat dies außerdem Vorrang vor allen Stilen.
Stile reagieren nicht auf Änderungen der Eigenschaften und bleiben während der gesamten Laufzeit einer App unverändert. Apps können jedoch dynamisch auf Stiländerungen zur Laufzeit reagieren, indem sie dynamische Ressourcen verwenden. Weitere Informationen finden Sie unter Dynamische Stile.
Explizite Stile
Um ein Style auf Seitenebene zu erstellen, muss der Seite ein ResourceDictionary hinzugefügt werden, und dann können eine oder mehrere Style-Deklarationen in das ResourceDictionary eingefügt werden. Ein Style wird explizit gemacht, indem seiner Deklaration ein x:Key
-Attribut zugewiesen wird, das ihm einen beschreibenden Schlüssel im ResourceDictionary gibt. Die expliziten Stile müssen dann auf bestimmte visuelle Elemente angewendet werden, indem ihre StyleEigenschaften gesetzt werden.
Das folgende Beispiel zeigt explizite Stile in der ResourceDictionary einer Seite, die auf die Label Objekte der Seite angewendet werden:
<ContentPage ...>
<ContentPage.Resources>
<Style x:Key="labelRedStyle"
TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="Center" />
<Setter Property="FontSize" Value="18" />
<Setter Property="TextColor" Value="Red" />
</Style>
<Style x:Key="labelGreenStyle"
TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="Center" />
<Setter Property="FontSize" Value="18" />
<Setter Property="TextColor" Value="Green" />
</Style>
<Style x:Key="labelBlueStyle"
TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="Center" />
<Setter Property="FontSize" Value="18" />
<Setter Property="TextColor" Value="Blue" />
</Style>
</ContentPage.Resources>
<StackLayout>
<Label Text="These labels"
Style="{StaticResource labelRedStyle}" />
<Label Text="are demonstrating"
Style="{StaticResource labelGreenStyle}" />
<Label Text="explicit styles,"
Style="{StaticResource labelBlueStyle}" />
<Label Text="and an explicit style override"
Style="{StaticResource labelBlueStyle}"
TextColor="Teal" />
</StackLayout>
</ContentPage>
In diesem Beispiel definiert die ResourceDictionary drei Stile, die explizit auf die Label-Objekte der Seite gesetzt werden. Jeder Style wird verwendet, um den Text in einer anderen Farbe darzustellen und gleichzeitig die Schriftgröße sowie die horizontalen und vertikalen Layoutoptionen festzulegen. Jeder Style wird auf ein anderes Label angewendet, indem seine Style-Eigenschaften mithilfe der StaticResource
-Markuperweiterung definiert werden. Zusätzlich hat das abschließende Label einen Style-Wert, überschreibt aber auch die TextColor
-Eigenschaft mit einem anderen Color-Wert.
Implizite Stile
Um ein Style auf Seitenebene zu erstellen, muss der Seite ein ResourceDictionary hinzugefügt werden, und dann können eine oder mehrere Style-Deklarationen in das ResourceDictionary eingefügt werden. Ein Style wird implizit gemacht, indem kein x:Key
-Attribut angegeben wird. Der Stil wird dann auf die visuellen Elemente innerhalb des Geltungsbereichs angewendet, die genau mit TargetType
übereinstimmen, aber nicht auf Elemente, die vom TargetType
-Wert abgeleitet sind.
Das folgende Codebeispiel zeigt einen impliziten Stil im ResourceDictionary einer Seite, der auf die Entry-Objekte der Seite angewendet wird:
<ContentPage ...>
<ContentPage.Resources>
<Style TargetType="Entry">
<Setter Property="HorizontalOptions" Value="Fill" />
<Setter Property="VerticalOptions" Value="Center" />
<Setter Property="BackgroundColor" Value="Yellow" />
<Setter Property="FontAttributes" Value="Italic" />
<Setter Property="TextColor" Value="Blue" />
</Style>
</ContentPage.Resources>
<StackLayout>
<Entry Text="These entries" />
<Entry Text="are demonstrating" />
<Entry Text="implicit styles," />
<Entry Text="and an implicit style override"
BackgroundColor="Lime"
TextColor="Red" />
<local:CustomEntry Text="Subclassed Entry is not receiving the style" />
</StackLayout>
</ContentPage>
In diesem Beispiel definiert das ResourceDictionary einen einzelnen impliziten Stil, der implizit auf die Entry-Objekte der Seite gesetzt wird. Der Style wird verwendet, um blauen Text auf gelbem Hintergrund darzustellen und gleichzeitig andere Darstellungsoptionen zu definieren. Der Style wird dem ResourceDictionary der Seite hinzugefügt, ohne dass ein x:Key
-Attribut angegeben wird. Daher wird der Style implizit auf alle Entry-Objekte angewendet, da sie genau der TargetType
-Eigenschaft des Style entsprechen. Der Style wird jedoch nicht auf das CustomEntry
-Objekt angewendet, das eine Unterklasse von Entry ist. Außerdem überschreibt das vierte Entry die BackgroundColor
- und TextColor
-Eigenschaften des Stils auf verschiedene Color-Werte.
Anwenden eines Stils auf abgeleitete Typen
Die Style.ApplyToDerivedTypes
-Eigenschaft ermöglicht die Anwendung eines Stils auf Steuerelemente, die von dem durch die TargetType
-Eigenschaft referenzierten Basistyp abgeleitet sind. Wenn diese Eigenschaft auf true
gesetzt wird, kann ein einziger Stil auf mehrere Typen angewendet werden, sofern diese Typen von dem in der Eigenschaft TargetType
angegebenen Basistyp abgeleitet sind.
Das folgende Beispiel zeigt einen impliziten Stil, der die Hintergrundfarbe von Button-Instanzen auf Rot setzt:
<Style TargetType="Button"
ApplyToDerivedTypes="True">
<Setter Property="BackgroundColor"
Value="Red" />
</Style>
Wenn Sie diesen Stil in einem ResourceDictionary auf Seitenebene platzieren, wird er auf alle Button-Objekte auf der Seite angewendet und auch auf alle Steuerelemente, die von Button abgeleitet sind. Wenn die ApplyToDerivedTypes
-Eigenschaft jedoch nicht gesetzt ist, wird der Stil nur auf Button-Objekte angewendet.
Globale Stile
Stile können global definiert werden, indem sie dem Ressourcenwörterbuch der App hinzugefügt werden. Diese Stile können dann in der gesamten App verwendet werden und helfen, die Duplizierung von Stilen auf Seiten und Steuerelementen zu vermeiden.
Das folgende Beispiel zeigt einen Style, der auf App-Ebene definiert wurde:
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Styles"
x:Class="Styles.App">
<Application.Resources>
<Style x:Key="buttonStyle" TargetType="Button">
<Setter Property="HorizontalOptions"
Value="Center" />
<Setter Property="VerticalOptions"
Value="CenterAndExpand" />
<Setter Property="BorderColor"
Value="Lime" />
<Setter Property="CornerRadius"
Value="5" />
<Setter Property="BorderWidth"
Value="5" />
<Setter Property="WidthRequest"
Value="200" />
<Setter Property="TextColor"
Value="Teal" />
</Style>
</Application.Resources>
</Application>
In diesem Beispiel definiert das ResourceDictionary einen einzigen expliziten Stil, buttonStyle
, der verwendet wird, um die Darstellung von Button-Objekten zu definieren.
Hinweis
Globale Stile können explizit oder implizit sein.
Das folgende Beispiel zeigt eine Seite, die den buttonStyle
auf den Button-Objekten der Seite verwendet:
<ContentPage ...>
<StackLayout>
<Button Text="These buttons"
Style="{StaticResource buttonStyle}" />
<Button Text="are demonstrating"
Style="{StaticResource buttonStyle}" />
<Button Text="application styles"
Style="{StaticResource buttonStyle}" />
</StackLayout>
</ContentPage>
Stilvererbung
Stile können von anderen Stilen geerbt werden, um Doppelarbeit zu vermeiden und Wiederverwendung zu ermöglichen. Dies wird erreicht, indem die Eigenschaft Style.BasedOn
auf einen vorhandenen Style gesetzt wird. In XAML kann dies erreicht werden, indem die BasedOn
-Eigenschaft auf eine StaticResource
-Markuperweiterung gesetzt wird, die auf einen zuvor erstellten Style verweist.
Stile, die von einem Basisstil erben, können Setter-Instanzen für neue Eigenschaften enthalten oder diese verwenden, um Setter des Basisstils zu überschreiben. Darüber hinaus müssen Stile, die von einem Basisstil erben, auf denselben Typ oder einen Typ abzielen, der von dem Typ abgeleitet ist, auf den der Basisstil abzielt. Wenn beispielsweise ein Basisstil auf View-Objekte abzielt, können Stile, die auf dem Basisstil basieren, auf View-Objekte oder auf Typen abzielen, die von der View-Klasse abgeleitet sind, wie Label- und Button-Objekte.
Ein Stil kann nur von Stilen auf der gleichen oder einer höheren Ebene der Ansichtshierarchie erben. Dies bedeutet Folgendes:
- Ein Stil auf App-Ebene kann nur von anderen Stilen auf App-Ebene erben.
- Ein Stil auf Seitenebene kann von Stilen auf App-Ebene und von anderen Stilen auf Seitenebene erben.
- Ein Stil auf Steuerungsebene kann von Stilen auf App-Ebene, Stilen auf Seitenebene und anderen Stilen auf Steuerungsebene erben.
Das folgende Beispiel zeigt eine explizite Stilvererbung:
<ContentPage ...>
<ContentPage.Resources>
<Style x:Key="baseStyle"
TargetType="View">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="Center" />
</Style>
</ContentPage.Resources>
<StackLayout>
<StackLayout.Resources>
<Style x:Key="labelStyle"
TargetType="Label"
BasedOn="{StaticResource baseStyle}">
<Setter Property="FontSize" Value="18" />
<Setter Property="FontAttributes" Value="Italic" />
<Setter Property="TextColor" Value="Teal" />
</Style>
<Style x:Key="buttonStyle"
TargetType="Button"
BasedOn="{StaticResource baseStyle}">
<Setter Property="BorderColor" Value="Lime" />
<Setter Property="CornerRadius" Value="5" />
<Setter Property="BorderWidth" Value="5" />
<Setter Property="WidthRequest" Value="200" />
<Setter Property="TextColor" Value="Teal" />
</Style>
</StackLayout.Resources>
<Label Text="This label uses style inheritance"
Style="{StaticResource labelStyle}" />
<Button Text="This button uses style inheritance"
Style="{StaticResource buttonStyle}" />
</StackLayout>
</ContentPage>
In diesem Beispiel zielt der baseStyle
auf View-Objekte ab und setzt die HorizontalOptions
- und VerticalOptions
-Eigenschaften. Der baseStyle
wird nicht direkt auf ein Steuerelement gesetzt. Stattdessen erben labelStyle
und buttonStyle
von ihm und setzen zusätzliche bindbare Eigenschaftswerte. Die labelStyle
- und buttonStyle
-Objekte werden dann auf ein Label und Button gesetzt.
Wichtig
Ein impliziter Stil kann von einem expliziten Stil abgeleitet werden, aber ein expliziter Stil kann nicht von einem impliziten Stil abgeleitet werden.
Dynamische Stile
Stile reagieren nicht auf Änderungen der Eigenschaften und bleiben während der gesamten Laufzeit einer App unverändert. Wenn beispielsweise nach der Zuweisung eines Style zu einem visuellen Element eines der Setter-Objekte geändert oder gelöscht wird oder ein neuer Setter hinzugefügt wird, werden diese Änderungen nicht auf das visuelle Element angewendet. Apps können jedoch dynamisch auf Stiländerungen zur Laufzeit reagieren, indem sie dynamische Ressourcen verwenden.
Die DynamicResource
-Markuperweiterung ähnelt der StaticResource
-Markuperweiterung insofern ähnlich, als beide einen Wörterbuchschlüssel verwenden, um einen Wert aus einem ResourceDictionary zu extrahieren. Während die StaticResource
jedoch nur eine einzige Wörterbuchabfrage durchführt, behält die DynamicResource
eine Verknüpfung zum Wörterbuchschlüssel bei. Wenn also der mit dem Schlüssel verknüpfte Wörterbucheintrag ersetzt wird, wird die Änderung auf das visuelle Element angewendet. Dies ermöglicht Stiländerungen in einer App zur Laufzeit.
Das folgende Beispiel zeigt dynamische Stile:
<ContentPage ...>
<ContentPage.Resources>
<Style x:Key="baseStyle"
TargetType="View">
<Setter Property="VerticalOptions" Value="Center" />
</Style>
<Style x:Key="blueSearchBarStyle"
TargetType="SearchBar"
BasedOn="{StaticResource baseStyle}">
<Setter Property="FontAttributes" Value="Italic" />
<Setter Property="PlaceholderColor" Value="Blue" />
</Style>
<Style x:Key="greenSearchBarStyle"
TargetType="SearchBar">
<Setter Property="FontAttributes" Value="None" />
<Setter Property="PlaceholderColor" Value="Green" />
</Style>
</ContentPage.Resources>
<StackLayout>
<SearchBar Placeholder="SearchBar demonstrating dynamic styles"
Style="{DynamicResource blueSearchBarStyle}" />
</StackLayout>
</ContentPage>
In diesem Beispiel verwendet das SearchBar-Objekt die DynamicResource
-Markuperweiterung, um einen Style mit dem Namen blueSearchBarStyle
zu setzen. Die SearchBar kann dann ihre Style-Definition im Code aktualisieren lassen:
Resources["blueSearchBarStyle"] = Resources["greenSearchBarStyle"];
In diesem Beispiel wird die blueSearchBarStyle
-Definition aktualisiert, um die Werte aus der greenSearchBarStyle
-Definition zu verwenden. Wenn dieser Code ausgeführt wird, wird die SearchBar aktualisiert, um die in der greenSearchBarStyle
definierten Setter-Objekte zu verwenden.
Vererbung dynamischer Stile
Die Ableitung eines Stils aus einem dynamischen Stil ist mit der Eigenschaft Style.BasedOn
nicht möglich. Stattdessen enthält die Style-Klasse die Eigenschaft BaseResourceKey
, die auf einen Wörterbuchschlüssel gesetzt werden kann, dessen Wert sich dynamisch ändern kann.
Das folgende Beispiel zeigt eine dynamische Stilvererbung:
<ContentPage ...>
<ContentPage.Resources>
<Style x:Key="baseStyle"
TargetType="View">
<Setter Property="VerticalOptions" Value="Center" />
</Style>
<Style x:Key="blueSearchBarStyle"
TargetType="SearchBar"
BasedOn="{StaticResource baseStyle}">
<Setter Property="FontAttributes" Value="Italic" />
<Setter Property="TextColor" Value="Blue" />
</Style>
<Style x:Key="greenSearchBarStyle"
TargetType="SearchBar">
<Setter Property="FontAttributes" Value="None" />
<Setter Property="TextColor" Value="Green" />
</Style>
<Style x:Key="tealSearchBarStyle"
TargetType="SearchBar"
BaseResourceKey="blueSearchBarStyle">
<Setter Property="BackgroundColor" Value="Teal" />
<Setter Property="CancelButtonColor" Value="White" />
</Style>
</ContentPage.Resources>
<StackLayout>
<SearchBar Text="SearchBar demonstrating dynamic style inheritance"
Style="{StaticResource tealSearchBarStyle}" />
</StackLayout>
</ContentPage>
In diesem Beispiel verwendet das SearchBar-Objekt die StaticResource
-Markuperweiterung, um auf einen Style namens tealSearchBarStyle
zu verweisen. Dieser Style definiert einige zusätzliche Eigenschaften und verwendet die BaseResourceKey
-Eigenschaft, um auf blueSearchBarStyle
zu verweisen. Die DynamicResource
-Markuperweiterung ist nicht erforderlich, da tealSearchBarStyle
unverändert bleibt, mit Ausnahme von Style, von dem es abgeleitet ist. Daher behält tealSearchBarStyle
eine Verbindung zum blueSearchBarStyle
bei und wird aktualisiert, wenn sich der Basisstil ändert.
Die Definition von blueSearchBarStyle
kann im Code aktualisiert werden:
Resources["blueSearchBarStyle"] = Resources["greenSearchBarStyle"];
In diesem Beispiel wird die blueSearchBarStyle
-Definition aktualisiert, um die Werte aus der greenSearchBarStyle
-Definition zu verwenden. Wenn dieser Code ausgeführt wird, wird die SearchBar aktualisiert, um die in der greenSearchBarStyle
definierten Setter-Objekte zu verwenden.
Stilklassen
Stilklassen ermöglichen es, mehrere Stile auf ein Steuerelement anzuwenden, ohne auf die Stilvererbung zurückgreifen zu müssen.
Eine Stilklasse kann erstellt werden, indem die Class
-Eigenschaft eines Style auf eine string
gesetzt wird, die den Klassennamen darstellt. Der Vorteil gegenüber der Definition eines expliziten Stils mit dem Attribut x:Key
besteht darin, dass mehrere Stilklassen auf einem VisualElement angewendet werden können.
Wichtig
Mehrere Stile können denselben Klassennamen haben, solange sie auf unterschiedliche Typen abzielen. Auf diese Weise können mehrere gleichnamige Stilklassen für unterschiedliche Typen verwendet werden.
Das folgende Beispiel zeigt drei BoxView-Stilklassen und eine VisualElement-Stilklasse:
<ContentPage ...>
<ContentPage.Resources>
<Style TargetType="BoxView"
Class="Separator">
<Setter Property="BackgroundColor"
Value="#CCCCCC" />
<Setter Property="HeightRequest"
Value="1" />
</Style>
<Style TargetType="BoxView"
Class="Rounded">
<Setter Property="BackgroundColor"
Value="#1FAECE" />
<Setter Property="HorizontalOptions"
Value="Start" />
<Setter Property="CornerRadius"
Value="10" />
</Style>
<Style TargetType="BoxView"
Class="Circle">
<Setter Property="BackgroundColor"
Value="#1FAECE" />
<Setter Property="WidthRequest"
Value="100" />
<Setter Property="HeightRequest"
Value="100" />
<Setter Property="HorizontalOptions"
Value="Start" />
<Setter Property="CornerRadius"
Value="50" />
</Style>
<Style TargetType="VisualElement"
Class="Rotated"
ApplyToDerivedTypes="true">
<Setter Property="Rotation"
Value="45" />
</Style>
</ContentPage.Resources>
</ContentPage>
In diesem Beispiel setzen die Separator
-, Rounded
- und Circle
-Stilklassen die BoxView-Eigenschaften auf bestimmte Werte. Die Rotated
-Stilklasse hat einen TargetType
vom VisualElement, was bedeutet, dass sie nur auf VisualElement-Instanzen angewendet werden kann. Seine ApplyToDerivedTypes
-Eigenschaft ist jedoch auf true
gesetzt, wodurch sichergestellt wird, dass sie auf alle vom VisualElement abgeleiteten Steuerelemente wie BoxView angewendet werden kann. Weitere Informationen zur Anwendung eines Stils auf einen abgeleiteten Typ finden Sie unter Anwenden eines Stils auf abgeleitete Typen.
Stilklassen können verwendet werden, indem die StyleClass
-Eigenschaft des Steuerelements, die vom Typ IList<string>
ist, auf eine Liste von Stilklassennamen gesetzt wird. Die Stilklassen werden angewendet, wenn der Typ des Steuerelements mit dem TargetType
der Stilklassen übereinstimmt.
Das folgende Beispiel zeigt drei BoxView-Instanzen, die jeweils auf unterschiedliche Stilklassen gesetzt sind:
<ContentPage ...>
<ContentPage.Resources>
...
</ContentPage.Resources>
<StackLayout>
<BoxView StyleClass="Separator" />
<BoxView WidthRequest="100"
HeightRequest="100"
HorizontalOptions="Center"
StyleClass="Rounded, Rotated" />
<BoxView HorizontalOptions="Center"
StyleClass="Circle" />
</StackLayout>
</ContentPage>
In diesem Beispiel ist der erste BoxView als Zeilentrennzeichen gestaltet, während der dritte BoxView kreisförmig ist. Auf den zweiten BoxView werden zwei Stilklassen angewendet, die ihm abgerundete Ecken und eine Drehung um 45 Grad verleihen:
Wichtig
Auf ein Steuerelement können mehrere Stilklassen angewendet werden, da die Eigenschaft StyleClass
vom Typ IList<string>
ist. In diesem Fall werden die Stilklassen in aufsteigender Reihenfolge der Liste angewendet. Wenn also mehrere Stilklassen identische Eigenschaften definieren, hat die Eigenschaft der Stilklasse Vorrang, die in der Liste an erster Stelle steht.