.NET MAUI Shell Seiten
Ein ShellContent Objekt stellt das ContentPage Objekt für jedes FlyoutItem oder Tab dar. Wenn mehr als ein ShellContent Objekt in einem Tab Objekt vorhanden ist, können die ContentPage Objekte über die oberen Registerkarten navigiert werden. Auf einer Seite kann zu zusätzlichen ContentPage Objekten navigiert werden, die als Detailseiten bezeichnet werden.
Darüber hinaus definiert die Klasse Shell angehängte Eigenschaften, die verwendet werden können, um das Erscheinungsbild von Seiten in .NET Multi-platform App UI (.NET MAUI) Shell Apps zu konfigurieren. Diese Konfiguration umfasst die Einstellung der Seitenfarben, die Einstellung des Seitendarstellungsmodus, die Deaktivierung der Navigationsleiste, die Deaktivierung der Registerkartenleiste und die Anzeige von Ansichten in der Navigationsleiste.
Anzeigen von Seiten
In .NET MAUI Shell Apps werden die Seiten in der Regel bei Bedarf als Antwort auf die Navigation erstellt. Dies wird mithilfe der DataTemplate Markup-Erweiterung erreicht, um die ContentTemplate
Eigenschaft jedes ShellContent Objekts auf ein ContentPage Objekt festzusetzen:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<ShellContent Title="Cats"
Icon="cat.png"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Title="Dogs"
Icon="dog.png"
ContentTemplate="{DataTemplate views:DogsPage}" />
<ShellContent Title="Monkeys"
Icon="monkey.png"
ContentTemplate="{DataTemplate views:MonkeysPage}" />
</TabBar>
</Shell>
In diesem Beispiel werden die impliziten Konvertierungsoperatoren der Shell verwendet, um die Tab-Objekte aus der visuellen Hierarchie zu entfernen. Jedes ShellContent-Objekt wird jedoch auf einer Registerkarte gerendert:
Hinweis
Die BindingContext
-Eigenschaft der einzelnen ShellContent-Objekte wird jeweils vom übergeordneten Tab-Objekt geerbt.
Innerhalb jedes ContentPage-Objekts kann zu zusätzlichen ContentPage-Objekten navigiert werden. Weitere Informationen zur Navigation finden Sie unter .NET MAUI Shell Navigation.
Laden von Seiten beim App-Start
In einer Shell App wird jedes ContentPage Objekt in der Regel bei Bedarf als Antwort auf die Navigation erstellt. Es ist jedoch auch möglich, ContentPage Objekte beim Start der App zu erstellen.
Warnung
ContentPage Objekte, die beim Start der App erstellt werden, können zu einem schlechten Startverhalten führen.
ContentPage Objekte können beim Start der App erstellt werden, indem die ShellContent.Content
Eigenschaften auf ContentPage Objekte festgesetzt werden:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Xaminals.Views"
x:Class="Xaminals.AppShell">
<TabBar>
<ShellContent Title="Cats"
Icon="cat.png">
<views:CatsPage />
</ShellContent>
<ShellContent Title="Dogs"
Icon="dog.png">
<views:DogsPage />
</ShellContent>
<ShellContent Title="Monkeys"
Icon="monkey.png">
<views:MonkeysPage />
</ShellContent>
</TabBar>
</Shell>
In diesem Beispiel werden alle CatsPage
, DogsPage
und MonkeysPage
beim Start der App erstellt und nicht bei Bedarf als Antwort auf die Navigation.
Hinweis
Die Content
-Eigenschaft ist die Inhaltseigenschaft der ShellContent-Klasse und muss daher nicht explizit festgelegt werden.
Festlegen der Seitenfarben
Die Klasse Shell definiert die folgenden angehängten Eigenschaften, die zum Festlegen von Seitenfarben in einer Shell App verwendet werden können:
BackgroundColor
vom Typ Color definiert die Hintergrundfarbe im Shellchrom. Die Farbe wird hinter dem Shell-Inhalt nicht ausgefüllt.DisabledColor
vom Typ Color definiert die Farbe für deaktivierten Text und deaktivierte Symbole.ForegroundColor
vom Typ Color definiert die Farbe für Text und Symbole.TitleColor
vom Typ Color definiert die Farbe für den Titel der aktuellen Seite.UnselectedColor
vom Typ Color definiert die Farbe für nicht ausgewählten Text und nicht ausgewählte Symbole im Shellchrom.
Alle diese Eigenschaften werden durch BindableProperty-Objekte gestützt, was bedeutet, dass die Eigenschaften Ziele von Datenverbindungen sein und unter Verwendung von XAML-Formatvorlagen formatiert werden können. Darüber hinaus können die Eigenschaften mithilfe von Cascading Stylesheets (CSS) festgelegt werden. Weitere Informationen finden Sie unter .NET MAUI Shell-spezifische Eigenschaften.
Hinweis
Es gibt auch Eigenschaften, mit denen Sie Registerkartenfarben definieren können. Weitere Informationen finden Sie unter Darstellung von Registerkarten.
Der folgende XAML-Code veranschaulicht das Festlegen der Farbeigenschaften in einer Shell-Klasse mit Unterklassen:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Xaminals.AppShell"
BackgroundColor="#455A64"
ForegroundColor="White"
TitleColor="White"
DisabledColor="#B4FFFFFF"
UnselectedColor="#95FFFFFF">
</Shell>
In diesem Beispiel werden die Farbwerte auf alle Seiten in der Shell App angewendet, sofern sie nicht auf Seitenebene überschrieben werden.
Da die Farbeigenschaften angefügte Eigenschaften sind, können sie auch für einzelne Seiten festgelegt werden, um die Farben auf der entsprechenden Seite festzulegen:
<ContentPage ...
Shell.BackgroundColor="Gray"
Shell.ForegroundColor="White"
Shell.TitleColor="Blue"
Shell.DisabledColor="#95FFFFFF"
Shell.UnselectedColor="#B4FFFFFF">
</ContentPage>
Alternativ können die Farbeigenschaften mit einer XAML-Formatvorlage festgelegt werden:
<Style x:Key="DomesticShell"
TargetType="Element" >
<Setter Property="Shell.BackgroundColor"
Value="#039BE6" />
<Setter Property="Shell.ForegroundColor"
Value="White" />
<Setter Property="Shell.TitleColor"
Value="White" />
<Setter Property="Shell.DisabledColor"
Value="#B4FFFFFF" />
<Setter Property="Shell.UnselectedColor"
Value="#95FFFFFF" />
</Style>
Weitere Informationen über XAML-Stile finden Sie unter Mit XAML Apps gestalten.
Festlegen des Seitenpräsentationsmodus
Standardmäßig wird eine kleine Navigationsanimation angezeigt, wenn mit der GoToAsync-Methode zu einer Seite navigiert wird. Dieses Verhalten kann jedoch geändert werden, indem die angefügte Eigenschaft Shell.PresentationMode
für eine ContentPage-Klasse auf einen der PresentationMode
-Enumerationsmember festgelegt wird:
NotAnimated
gibt an, dass die Seite ohne Navigationsanimation angezeigt wird.Animated
gibt an, dass die Seite mit Navigationsanimation angezeigt wird. Dies ist der Standardwert der angefügtenShell.PresentationMode
-Eigenschaft.Modal
gibt an, dass die Seite als modale Seite angezeigt wird.ModalAnimated
gibt an, dass die Seite als modale Seite mit Navigationsanimation angezeigt wird.ModalNotAnimated
gibt an, dass die Seite als modale Seite ohne Navigationsanimation angezeigt wird.
Wichtig
Der Typ PresentationMode
ist eine Flagenumeration. Dies bedeutet, dass im Code eine Kombination von Enumerationsmembern angewendet werden kann. Für mehr Benutzerfreundlichkeit in XAML ist das ModalAnimated
-Member jedoch eine Kombination der Member Animated
und Modal
und das ModalNotAnimated
-Member eine Kombination der Member NotAnimated
und Modal
. Weitere Informationen zu Flagenumerationen finden Sie unter Enumerationstypen als Bitflags.
Im folgenden XAML-Beispiel wird die angefügte Eigenschaft Shell.PresentationMode
für eine ContentPage-Klasse festgelegt:
<ContentPage ...
Shell.PresentationMode="Modal">
...
</ContentPage>
In diesem Beispiel wird die ContentPage-Klasse so festgelegt, dass sie als modale Seite angezeigt wird, wenn mit der GoToAsync-Methode zur Seite navigiert wird.
Aktivieren des Navigationsleistenschattens
Die angefügte Eigenschaft Shell.NavBarHasShadow
vom Typ bool
steuert, ob die Navigationsleiste über einen Schatten verfügt. Standardmäßig lautet der Wert der Eigenschaft true
auf Android und false
auf anderen Plattformen.
Diese Eigenschaft kann zwar für ein Shell-Objekt mit Unterklassen festgelegt werden, aber auch für alle Seiten, für die der Schatten der Navigationsleiste aktiviert werden soll. Im folgenden XAML-Code wird zum Beispiel das Aktivieren des Navigationsleistenschattens durch eine ContentPage gezeigt:
<ContentPage ...
Shell.NavBarHasShadow="true">
...
</ContentPage>
Dies führt dazu, dass der Schatten der Navigationsleiste aktiviert wird.
Deaktivieren der Navigationsleiste
Die angefügte Eigenschaft Shell.NavBarIsVisible
vom Typ bool
steuert, ob die Navigationsleiste eingeblendet sein soll, wenn eine Seite angezeigt wird. Der Standardwert der Eigenschaft lautet true
.
Diese Eigenschaft kann zwar für ein Shell-Objekt mit Unterklassen festgelegt werden, wird aber in der Regel für alle Seiten festgelegt, auf denen die Navigationsleiste ausgeblendet sein soll. Im folgenden XAML-Code wird zum Beispiel die Navigationsleiste von einem ContentPage-Objekt deaktiviert:
<ContentPage ...
Shell.NavBarIsVisible="false">
...
</ContentPage>
Anzeigen von Ansichten in der Navigationsleiste
Die angefügte Eigenschaft Shell.TitleView
vom Typ View aktiviert alle View-Klassen, die in der Navigationsleiste angezeigt werden sollen.
Diese Eigenschaft kann zwar für ein Shell-Objekt mit Unterklassen festgelegt werden, aber auch für alle Seiten, auf denen eine Ansicht in der Navigationsleiste angezeigt werden soll. Im folgenden XAML-Code wird zum Beispiel ein Image-Objekt in der Navigationsleiste einer ContentPage angezeigt:
<ContentPage ...>
<Shell.TitleView>
<Image Source="logo.png"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Shell.TitleView>
...
</ContentPage>
Wichtig
Wenn die Navigationsleiste mit der angefügten Eigenschaft NavBarIsVisible
ausgeblendet wurde, wird die Titelansicht nicht angezeigt.
Viele Ansichten werden nicht in der Navigationsleiste angezeigt, wenn die Größe der Ansicht nicht mit den Eigenschaften WidthRequest und HeightRequest oder die Position der Ansicht nicht mit den Eigenschaften HorizontalOptions
und VerticalOptions
angegeben wird.
Die angehängte Eigenschaft TitleView
kann eingestellt werden, um eine Layoutklasse anzuzeigen, die mehrere Ansichten enthält. Entsprechend gilt, dass die angefügte TitleView
-Eigenschaft so festgelegt werden kann, dass sie eine ContentView anzeigt, die eine einzelne Ansicht enthält, weil die ContentView-Klasse letztendlich von der View-Klasse abgeleitet ist.
Seitensichtbarkeit
Shell beachtet die Sichtbarkeit der Seite, die mit der Eigenschaft IsVisible
festgelegt wird. Wenn die IsVisible
-Eigenschaft einer Seite auf false
gesetzt ist, ist sie in der Shell App nicht sichtbar und es ist nicht möglich, zu ihr zu navigieren.