Xamarin.Forms Pages d’interpréteur de commandes
Un ShellContent
objet représente l’objet ContentPage
pour chaque FlyoutItem
ou Tab
. Lorsque plusieurs objets ShellContent
sont présents dans un objet Tab
, il est possible de naviguer entre les objets ContentPage
grâce aux onglets du haut. Dans une page, des objets supplémentaires ContentPage
appelés pages de détails peuvent être accédés.
En outre, la Shell
classe définit les propriétés jointes qui peuvent être utilisées pour configurer l’apparence des pages dans les Xamarin.Forms applications Shell. Cela comprend notamment la configuration des couleurs de la page, la configuration du mode de présentation de la page, la désactivation de la barre de navigation et de la barre d’onglet ainsi que l’affichage des vues dans la barre de navigation.
Afficher les pages
Dans Xamarin.Forms les applications Shell, les pages sont généralement créées à la demande en réponse à la navigation. Pour ce faire, utilisez l’extension de DataTemplate
balisage pour définir la ContentTemplate
propriété de chaque ShellContent
objet sur un ContentPage
objet :
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
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>
Dans cet exemple, les opérateurs de conversion implicite de Shell sont utilisés pour supprimer les Tab
objets de la hiérarchie visuelle. Toutefois, chaque ShellContent
objet est rendu dans un onglet :
Remarque
Le BindingContext
de chaque objet ShellContent
est hérité de l’objet Tab
parent.
Dans chaque objet ContentPage
, des objets ContentPage
supplémentaires sont accessibles. Pour plus d’informations sur la navigation, consultez Xamarin.Forms navigation Shell.
Charger des pages au démarrage de l’application
Dans une application Shell, chaque ContentPage
objet est généralement créé à la demande, en réponse à la navigation. Toutefois, il est également possible de créer ContentPage
des objets au démarrage de l’application.
Avertissement
ContentPage
les objets créés au démarrage de l’application peuvent entraîner une mauvaise expérience de démarrage.
ContentPage
les objets peuvent être créés au démarrage de l’application en définissant les ShellContent.Content
propriétés sur ContentPage
des objets :
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
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>
Dans cet exemple, CatsPage
, DogsPage
et MonkeysPage
sont tous créés au démarrage de l’application, plutôt qu’à la demande en réponse à la navigation.
Remarque
La Content
propriété est la propriété de contenu de la ShellContent
classe et n’a donc pas besoin d’être définie explicitement.
Définir les couleurs de page
La classe Shell
définit les propriétés jointes suivantes qui peuvent être utilisées pour définir les couleurs de page dans une application Shell :
BackgroundColor
, de typeColor
: définit la couleur d’arrière-plan du chrome Shell. La couleur n’apparaît pas derrière le contenu Shell.DisabledColor
, de typeColor
: définit la couleur permettant d’ombrer le texte et les icônes désactivées.ForegroundColor
, de typeColor
: définit la couleur permettant d’ombrer le texte et les icônes.TitleColor
, de typeColor
: définit la couleur utilisée pour le titre de la page actuelle.UnselectedColor
, de typeColor
: définit la couleur appliquée au texte et aux icônes non sélectionnés dans le chrome Shell.
Toutes ces propriétés s’appuient sur des objets BindableProperty
, ce qui signifie qu’elles peuvent être des cibles de liaisons de données et des styles XAML peuvent être appliqués. En outre, les propriétés peuvent être définies à l’aide de feuilles de style en cascade (CSS). Pour plus d’informations, consultez Xamarin.Forms les propriétés spécifiques de Shell.
Remarque
Certaines propriétés permettent de définir les couleurs d’onglet. Pour plus d’informations, consultez Apparence d’onglet.
Le XAML suivant montre la configuration de propriétés de couleur dans une classe Shell
sous-classée :
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Xaminals.AppShell"
BackgroundColor="#455A64"
ForegroundColor="White"
TitleColor="White"
DisabledColor="#B4FFFFFF"
UnselectedColor="#95FFFFFF">
</Shell>
Dans cet exemple, les valeurs de couleur seront appliquées à toutes les pages dans l’application Shell à moins d’être substituées au niveau de la page.
Étant donné que les propriétés de couleur sont des propriétés jointes, elles peuvent également être définies sur des pages individuelles afin de définir les couleurs sur cette page :
<ContentPage ...
Shell.BackgroundColor="Gray"
Shell.ForegroundColor="White"
Shell.TitleColor="Blue"
Shell.DisabledColor="#95FFFFFF"
Shell.UnselectedColor="#B4FFFFFF">
</ContentPage>
Vous pouvez également définir les propriétés de couleur avec un style XAML :
<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>
Pour plus d’informations sur les styles XAML, consultez Applications de style Xamarin.Forms à l’aide de styles XAML.
Définir le mode de présentation de la page
Par défaut, une petite animation de navigation se produit lorsqu’une page fait l’objet d’un accès à l’aide de la méthode GoToAsync
. Toutefois, pour modifier ce comportement, définissez la propriété jointe Shell.PresentationMode
sur un ContentPage
l’un des membres de l’énumération PresentationMode
:
NotAnimated
indique que la page sera affichée sans animation de navigation.Animated
indique que la page sera affichée avec une animation de navigation. Ceci est la valeur par défaut de la propriété jointeShell.PresentationMode
.Modal
indique que la page est affichée comme page modale.ModalAnimated
indique que la page est affichée comme page modale, avec une animation de navigation.ModalNotAnimated
indique que la page est affichée comme page modale, sans animation de navigation.
Important
Le type PresentationMode
est une énumération d’indicateurs. Cela signifie qu’une combinaison de membres de l’énumération peut être appliquée dans le code. Toutefois, pour faciliter l’utilisation dans XAML, le membre ModalAnimated
est une combinaison des membres Animated
et Modal
, et le membre ModalNotAnimated
est une combinaison des membres NotAnimated
et Modal
. Pour plus d’informations sur les énumérations d’indicateur, consultez Types énumération comme indicateurs binaires.
L’exemple XAML suivant définit la propriété jointe Shell.PresentationMode
sur un ContentPage
:
<ContentPage ...
Shell.PresentationMode="Modal">
...
</ContentPage>
Dans cet exemple, ContentPage
est défini pour s’afficher comme une page modale, lorsque la page fait l’objet d’un accès avec la méthode GoToAsync
.
Activer l’ombre de la barre de navigation
La Shell.NavBarHasShadow
propriété jointe, de type bool
, contrôle si la barre de navigation a une ombre. Par défaut, la valeur de la propriété est false
sur iOS et true
sur Android.
Bien que cette propriété puisse être définie sur un objet Shell
sous-classé, elle peut également être définie sur toutes les pages devant afficher l’ombre de la barre de navigation. Par exemple, le XAML suivant montre l’activation de l’ombre de la barre de navigation sur une page ContentPage
:
<ContentPage ...
Shell.NavBarHasShadow="true">
...
</ContentPage>
Cela entraîne l’activation de l’ombre de la barre de navigation.
Désactiver la barre de navigation
La Shell.NavBarIsVisible
propriété jointe, de type bool
, contrôle si la barre de navigation est visible lorsqu’une page est présentée. Par défaut, la valeur de la propriété est true
.
Bien que cette propriété puisse être définie sur un objet Shell
sous-classé, elle est généralement définie sur toutes les pages sur lesquelles vous souhaitez masquer la barre de navigation. Par exemple, le XAML suivant montre la désactivation de la barre de navigation sur une page ContentPage
:
<ContentPage ...
Shell.NavBarIsVisible="false">
...
</ContentPage>
Ainsi, la barre de navigation devient invisible lorsque la page s’affiche :
Affichage des vues dans la barre de navigation
La Shell.TitleView
propriété jointe, de type View
, permet d’afficher n’importe quelle View
valeur dans la barre de navigation.
Bien que cette propriété puisse être définie sur un objet Shell
sous-classé, elle peut également être définie sur toutes les pages devant afficher une vue dans la barre de navigation. Par exemple, le XAML suivant montre l’affichage d’une Image
dans la barre de navigation sur une page ContentPage
:
<ContentPage ...>
<Shell.TitleView>
<Image Source="xamarin_logo.png"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Shell.TitleView>
...
</ContentPage>
Ainsi, une image s’affiche dans la barre de navigation de la page :
Important
Si la barre de navigation est invisible, avec la propriété jointe NavBarIsVisible
, la vue de titre ne s’affichera pas.
De nombreuses vues ne s’affichent dans la barre de navigation que si la taille de la vue est spécifiée avec les propriétés WidthRequest
et HeightRequest
, ou si l’emplacement de la vue est spécifié avec les propriétés HorizontalOptions
et VerticalOptions
.
La classe Layout
dérive de la classe View
, la propriété jointe TitleView
peut donc être configurée de façon à afficher une classe de disposition qui contient plusieurs vues. De même, la classe ContentView
dérive au final de la classe View
, la propriété jointe TitleView
peut donc être configurée de façon à afficher une ContentView
qui contient plusieurs vues.
Visibilité de la page
Shell respecte la visibilité de la page, définie avec la propriété IsVisible
. Par conséquent, lorsque la propriété IsVisible
d’une page est définie sur false
elle n’est pas visible dans l’application Shell et il n’est pas possible d’y accéder.