Développeur du kit de ressources de la communauté Xamarin
Le contrôle Xamarin.CommunityToolkit Expander
fournit un conteneur extensible pour héberger tout contenu. Le contrôle a un en-tête et un contenu, et le contenu est affiché ou masqué en appuyant sur l’en-tête Expander
. Lorsque seul l’en-tête Expander
est affiché, il Expander
est réduit. Lorsque le contenu est visible, Expander
le Expander
contenu est développé.
Notes
Le Expander
contrôle est connu pour afficher un comportement indésirable lorsqu’il est utilisé dans un ListView
ou CollectionView
. À ce stade, nous vous recommandons de ne pas utiliser un Expander
de ces contrôles.
Les captures d’écran suivantes montrent un Expander
état réduit et développé, avec des zones rouges indiquant l’en-tête et le contenu :
Notes
Le Expander
contrôle est entièrement implémenté dans le code multiplateforme. Par conséquent, il est disponible sur toutes les plateformes prises en charge par Xamarin.Forms.
Le Expander
contrôle définit les propriétés suivantes :
AnimationEasing
, de typeEasing
, qui représente la fonction d’accélération à appliquer auExpander
contenu lorsqu’il est en expansion/collapsing si ExpandAnimationEasing/CollapseAnimationEasing n’est pas défini.AnimationLength
, de typeuint
, qui définit la durée de l’animation lors de l’expansionExpander
/de la réduction. La valeur par défaut de cette propriété est de 250ms.CollapseAnimationEasing
, de typeEasing
, qui représente la fonction d’accélération à appliquer auExpander
contenu lorsqu’il s’agit d’une réduction.CollapseAnimationLength
, de typeuint
, qui définit la durée de l’animation lors de l’effondrementExpander
. Si cette propriété n’est pas définie, la valeur AnimationLength est appliquée.Command
, de typeICommand
, qui est exécuté lorsque l’en-têteExpander
est taché.CommandParameter
, de typeobject
: paramètre passé à la commandeCommand
.Content
, de typeView
, qui définit le contenu à afficher lorsque leExpander
développe.ContentTemplate
, de typeDataTemplate
, qui est le modèle utilisé pour gonfler dynamiquement le contenu duExpander
.ExpandAnimationEasing
, de typeEasing
, qui représente la fonction d’accélération à appliquer au contenu pendant l’expansionExpander
.ExpandAnimationLength
, de typeuint
, qui définit la durée de l’animation lorsque leExpander
développe. Si cette propriété n’est pas définie, la valeur AnimationLength est appliquée.ForceUpdateSizeCommand
, de typeICommand
, qui définit la commande exécutée lorsque la taille du fichierExpander
est mise à jour. Cette propriété utilise leOneWayToSource
mode de liaison.Header
, de typeView
, qui définit le contenu de l’en-tête.IsExpanded
, de typebool
, qui détermine si leExpander
fichier est développé . Cette propriété utilise leTwoWay
mode de liaison et a une valeur par défaut .false
State
, de typeExpandState
, qui représente l’état duExpander
. Cette propriété utilise leOneWayToSource
mode de liaison.TouchCaptureView
, de typeView
, qui stocke l’affichage responsable du déclenchement de l’animation d’expansion/de collapsing, en appuyant sur.
Ces propriétés sont sauvegardées par BindableProperty
des objets, ce qui signifie qu’elles peuvent être des cibles de liaisons de données et de style.
Notes
La Content
propriété est la propriété de contenu de la Expander
classe et n’a donc pas besoin d’être définie explicitement à partir de XAML.
L’énumération ExpandState
définit les membres suivants :
Expanding
indique que leExpander
développement est en cours.Expanded
indique que le fichierExpander
est développé.Collapsing
indique que l’opérationExpander
est réductible.Collapsed
indique que la valeurExpander
est réduite.
Le Expander
contrôle définit également un Tapped
événement déclenché lorsque l’en-tête Expander
est taché. En outre, Expander
inclut une ForceUpdateSize
méthode qui peut être appelée pour redimensionner par programmation le redimensionnement au moment de l’exécution Expander
.
Important
Le Expander fait partie de Xamarin.Forms et a été déplacé vers Xamarin.CommunityToolkit. Dans le cadre de ce déplacement, l’énumération ExpanderState
a été renommée ExpandState
Créer un expandeur
L’exemple suivant montre comment instancier un Expander
en XAML :
<Expander>
<Expander.Header>
<Label Text="Baboon"
FontAttributes="Bold"
FontSize="Medium" />
</Expander.Header>
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Source="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg"
Aspect="AspectFill"
HeightRequest="120"
WidthRequest="120" />
<Label Grid.Column="1"
Text="Baboons are African and Arabian Old World monkeys belonging to the genus Papio, part of the subfamily Cercopithecinae."
FontAttributes="Italic" />
</Grid>
</Expander>
Dans cet exemple, la Expander
valeur est réduite par défaut et affiche un Label
en-tête. L’appui sur l’en-tête entraîne le Expander
développement pour révéler son contenu, qui est un Grid
contrôle enfant contenant. Lorsque le Expander
fichier est développé, le fait d’appuyer sur son en-tête réduit le Expander
.
Important
Lors de la définition de la Expander.Content
propriété, implicitement ou explicitement, le Expander
contenu est créé lorsque la page contenant celle-ci est accédée, même si celle-ci Expander
est réduite. Toutefois, la Expander.ContentTemplate
propriété peut être définie sur le contenu qui n’est gonflé que lorsque le Expander
développement se développe pour la première fois. Pour plus d’informations, consultez Créer du contenu Expander à la demande.
Vous pouvez également créer un Expander
code :
Expander expander = new Expander
{
Header = new Label
{
Text = "Baboon",
FontAttributes = FontAttributes.Bold,
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
}
};
Grid grid = new Grid
{
Padding = new Thickness(10),
ColumnDefinitions =
{
new ColumnDefinition { Width = GridLength.Auto },
new ColumnDefinition { Width = GridLength.Auto }
}
};
grid.Children.Add(new Image
{
Source = "http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg",
Aspect = Aspect.AspectFill,
HeightRequest = 120,
WidthRequest = 120
});
grid.Children.Add(new Label
{
Text = "Baboons are African and Arabian Old World monkeys belonging to the genus Papio, part of the subfamily Cercopithecinae.",
FontAttributes = FontAttributes.Italic
}, 1, 0);
expander.Content = grid;
Créer du contenu de l’éditeur à la demande
Expander
le contenu peut être créé à la Expander
demande, en réponse au développement. Pour ce faire, définissez la Expander.ContentTemplate
propriété sur une DataTemplate
propriété qui contient le contenu :
<Expander>
<Expander.Header>
<Label Text="{Binding Name}"
FontAttributes="Bold"
FontSize="Medium" />
</Expander.Header>
<Expander.ContentTemplate>
<DataTemplate>
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Source="{Binding ImageUrl}"
Aspect="AspectFill"
HeightRequest="120"
WidthRequest="120" />
<Label Grid.Column="1"
Text="{Binding Details}"
FontAttributes="Italic" />
</Grid>
</DataTemplate>
</Expander.ContentTemplate>
</Expander>
Dans cet exemple, le Expander
contenu n’est gonflé que lorsque le Expander
contenu s’étend pour la première fois.
L’avantage de cette approche est que lorsqu’une page contient plusieurs Expander
objets, le contenu d’un objet Expander
est créé uniquement lorsqu’il est développé pour la première fois par l’utilisateur.
Ajouter un indicateur d’expansion
Un Image
élément peut être ajouté à un Expander
en-tête pour fournir une indication visuelle de l’état d’expansion. Un DataTrigger
peut être attaché au Image
, qui modifie la Source
propriété en fonction de la valeur de la Expander.IsExpanded
propriété :
<Expander>
<Expander.Header>
<Grid>
<Label Text="{Binding Name}"
FontAttributes="Bold"
FontSize="Medium" />
<Image Source="expand.png"
HorizontalOptions="End"
VerticalOptions="Start">
<Image.Triggers>
<DataTrigger TargetType="Image"
Binding="{Binding Source={RelativeSource AncestorType={x:Type Expander}}, Path=IsExpanded}"
Value="True">
<Setter Property="Source"
Value="collapse.png" />
</DataTrigger>
</Image.Triggers>
</Image>
</Grid>
</Expander.Header>
<Expander.ContentTemplate>
<DataTemplate>
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Source="{Binding ImageUrl}"
Aspect="AspectFill"
HeightRequest="120"
WidthRequest="120" />
<Label Grid.Column="1"
Text="{Binding Details}"
FontAttributes="Italic" />
</Grid>
</DataTemplate>
</Expander.ContentTemplate>
</Expander>
Dans cet exemple, l’icône Image
affiche l’icône expand
par défaut :
La IsExpanded
propriété devient true
lorsque l’en-tête Expander
est tapé, ce qui entraîne l’affichage de l’icône collapse
:
Pour plus d’informations sur les déclencheurs, consultez Xamarin.Forms Triggers.
Incorporer un expandeur dans un développeur
Le contenu d’un contrôle Expander
peut être défini sur un autre Expander
contrôle pour activer plusieurs niveaux d’expansion. Le code XAML suivant montre un Expander
objet dont le contenu est un autre Expander
objet :
<Expander>
<Expander.Header>
<Label Text="{Binding Name}"
FontAttributes="Bold"
FontSize="Medium" />
</Expander.Header>
<Expander Padding="10">
<Expander.Header>
<Label Text="{Binding Location}"
FontSize="Medium" />
</Expander.Header>
<Expander.ContentTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Source="{Binding ImageUrl}"
Aspect="AspectFill"
HeightRequest="120"
WidthRequest="120" />
<Label Grid.Column="1"
Text="{Binding Details}"
FontAttributes="Italic" />
</Grid>
</DataTemplate>
</Expander.ContentTemplate>
</Expander>
</Expander>
Dans cet exemple, l’appui sur l’en-tête racine Expander
révèle l’en-tête pour l’enfant Expander
:
En appuyant sur l’en-tête enfant Expander
, son contenu est gonflé et affiché :
Définir l’animation de développement et de réduction
L’animation qui se produit lorsqu’un Expander
développement ou une réduction peut être définie en définissant les propriétés et CollapseAnimationEasing
les ExpandAnimationEasing
fonctions d’accélération incluses dans Xamarin.Forms ou les fonctions d’accélération personnalisées. Par défaut, les animations de développement et de réduction se produisent sur plus de 250 ms. Toutefois, ces durées peuvent être modifiées en définissant les ExpandAnimationLength
valeurs et CollapseAnimationLength
les propriétés sur uint
les valeurs.
Le code XAML suivant montre un exemple de définition de l’animation qui se produit lorsque l’utilisateur Expander
est développé ou réduit :
<Expander ExpandAnimationEasing="{CubicIn}"
ExpandAnimationLength="500"
CollapseAnimationEasing="{CubicOut}"
CollapseAnimationLength="500">
<Expander.Header>
<Label Text="{Binding Name}"
FontAttributes="Bold"
FontSize="Medium" />
</Expander.Header>
<Expander.ContentTemplate>
<DataTemplate>
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Source="{Binding ImageUrl}"
Aspect="AspectFill"
HeightRequest="120"
WidthRequest="120" />
<Label Grid.Column="1"
Text="{Binding Details}"
FontAttributes="Italic" />
</Grid>
</DataTemplate>
</Expander.ContentTemplate>
</Expander>
Dans cet exemple, la CubicIn
fonction d’accélération accélère lentement l’animation de développement sur 500ms, et la CubicOut
fonction d’accélération décélét rapidement l’animation de réduction sur 500 m.
Pour plus d’informations sur les fonctions d’accélération, consultez Xamarin.Forms Easing Functions.
Redimensionner un expandeur au moment de l’exécution
Une Expander
opération peut être redimensionnée par programmation au moment de l’exécution avec la ForceUpdateSize
méthode.
Compte tenu d’un Expander
nom expander
, dont le contenu inclut un TapGestureRecognizer
Label
associé à celui-ci, l’exemple de code suivant montre comment appeler la ForceUpdateSize
méthode :
void OnLabelTapped(object sender, EventArgs e)
{
Label label = sender as Label;
Expander expander = label.Parent.Parent.Parent as Expander;
if (label.FontSize == Device.GetNamedSize(NamedSize.Default, label))
{
label.FontSize = Device.GetNamedSize(NamedSize.Large, label);
}
else
{
label.FontSize = Device.GetNamedSize(NamedSize.Default, label);
}
expander.ForceUpdateSize();
}
Dans cet exemple, les FontSize
modifications apportées lors de l’utilisation Label
de l’objet Label
sont tachées. En raison de la taille de la police qui change, il est nécessaire de mettre à jour la taille de la Expander
police en appelant sa ForceUpdateSize
méthode.
Désactiver un expandeur
Une application peut entrer un état dans lequel le développement d’un Expander
n’est pas une opération valide. Dans ce cas, il Expander
peut être désactivé en définissant sa IsEnabled
propriété sur false. Cela empêchera les utilisateurs de développer ou de réduire le Expander
.