Xamarin Community Toolkit Expander
Laden Sie das Beispiel herunter
Das Xamarin.CommunityToolkit-Steuerelement Expander
bietet einen erweiterbaren Container zum Hosten beliebiger Inhalte. Das Steuerelement verfügt über eine Kopfzeile und einen Inhalt, und der Inhalt wird angezeigt oder ausgeblendet, indem sie auf die Expander
Kopfzeile tippen. Wenn nur die Kopfzeile angezeigt wird, wird dies Expander
Expander
reduziert. Wenn der Inhalt sichtbar ist, wird diesExpander
Expander
erweitert.
Hinweis
Das Expander
Steuerelement ist bekannt, dass unerwünschtes Verhalten angezeigt wird, wenn sie in einem oder einem ListView
Oder CollectionView
verwendet werden. Zu diesem Zeitpunkt wird empfohlen, eine Expander
dieser Steuerelemente nicht zu verwenden.
Die folgenden Screenshots zeigen einen Expander
reduzierten und erweiterten Zustand mit roten Feldern, die die Kopfzeile und den Inhalt angibt:
Hinweis
Das Expander
Steuerelement wird vollständig in plattformübergreifendem Code implementiert. Daher ist es auf allen Plattformen verfügbar, die von Xamarin.Forms unterstützt werden.
Das Expander
Steuerelement definiert die folgenden Eigenschaften:
AnimationEasing
, des TypsEasing
, der die Beschleunigungsfunktion darstellt, die auf denExpander
Inhalt angewendet werden soll, wenn es erweitert/kollapsing, wenn ExpandAnimationEasing/CollapseAnimationEasing nicht festgelegt ist.AnimationLength
, vom Typuint
, der die Dauer der Animation definiert, wenn dieExpander
Erweiterung/Abbruchzeit erfolgt. Der Standardwert dieser Eigenschaft beträgt 250ms.CollapseAnimationEasing
, vom TypEasing
, der die Beschleunigungsfunktion darstellt, die auf denExpander
Inhalt angewendet werden soll, wenn er abstürzt.CollapseAnimationLength
, vom Typuint
, der die Dauer der Animation definiert, wenn dieExpander
Animation abstürzt. Wenn diese Eigenschaft nicht festgelegt ist, wird der Wert "AnimationLength" angewendet.Command
, vom TypICommand
, der ausgeführt wird, wenn dieExpander
Kopfzeile gekippt wird.CommandParameter
vom Typobject
: der Parameter, der anCommand
übergeben wird.Content
, vom TypView
, der den Inhalt definiert, der angezeigt werden soll, wenn dieExpander
Erweiterung erweitert wird.ContentTemplate
, des TypsDataTemplate
, der die Vorlage verwendet, um den Inhalt desExpander
Inhalts dynamisch aufblasen zu können.ExpandAnimationEasing
, vom TypEasing
, der die Beschleunigungsfunktion darstellt, die während der Erweiterung auf denExpander
Inhalt angewendet werden soll.ExpandAnimationLength
, vom Typuint
, der die Dauer der Animation definiert, wenn dieExpander
Erweiterung erweitert wird. Wenn diese Eigenschaft nicht festgelegt ist, wird der Wert "AnimationLength" angewendet.ForceUpdateSizeCommand
, vom TypICommand
, der den Befehl definiert, der ausgeführt wird, wenn die Größe desExpander
Elements aktualisiert wird. Diese Eigenschaft verwendet denOneWayToSource
Bindungsmodus.Header
, vom TypView
, der den Kopfzeileninhalt definiert.IsExpanded
, vom Typ, der bestimmt, ob dieExpander
Erweiterungbool
erweitert wird. Diese Eigenschaft verwendet denTwoWay
Bindungsmodus und verfügt über einen Standardwert vonfalse
.State
, vom TypExpandState
, der den Zustand desExpander
Typs darstellt. Diese Eigenschaft verwendet denOneWayToSource
Bindungsmodus.TouchCaptureView
, vom TypView
, der die Ansicht speichert, die für das Auslösen der Erweiterungs-/Kollapierungsanimation verantwortlich ist, indem Sie tippen.
Diese Eigenschaften werden durch BindableProperty
-Objekte gestützt, was bedeutet, dass sie Ziele von Datenbindungen sein können, und geformt.
Hinweis
Die Content
-Eigenschaft ist die Inhaltseigenschaft der Expander
-Klasse und muss daher nicht explizit in XAML festgelegt werden.
Die ExpandState
-Enumeration definiert die folgenden Member:
Expanding
gibt an, dass dieExpander
Erweiterung erweitert wird.Expanded
gibt an, dass dieExpander
Erweiterung erweitert wird.Collapsing
gibt an, dass dieExpander
Abbruchung erfolgt.Collapsed
gibt an, dass diesExpander
reduziert ist.
Das Expander
Steuerelement definiert auch ein Tapped
Ereignis, das ausgelöst wird, wenn die Expander
Kopfzeile gekippt wird. Enthält außerdem Expander
eine ForceUpdateSize
Methode, die programmgesteuert aufgerufen werden kann, um die Größe der Expander
Laufzeit zu ändern.
Wichtig
Der Expander ist Teil von Xamarin.Forms und wurde in das Xamarin.CommunityToolkit verschoben. Im Rahmen dieser Verschiebung wurde die ExpanderState
Aufzählung umbenannt. ExpandState
Erstellen eines Expanders
Im folgenden Beispiel wird gezeigt, wie eine Instanziierung in Expander
XAML ausgeführt wird:
<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>
In diesem Beispiel wird die Expander
Standardeinstellung reduziert und wird als Label
Kopfzeile angezeigt. Wenn Sie auf die Kopfzeile tippen, wird die Erweiterung angezeigt, um den Expander
Inhalt anzuzeigen, der ein Grid
untergeordnetes Steuerelement enthält. Wenn dies Expander
erweitert wird, reduziert das Tippen auf seine Kopfzeile die Expander
.
Wichtig
Wenn Sie die Eigenschaft festlegen, entweder implizit oder explizit, wird der Expander.Content
Inhalt erstellt, wenn die Seite, zu der Expander
sie enthält, auch wenn dies Expander
reduziert wird. Die Eigenschaft kann jedoch auf Inhalte festgelegt werden, die nur aufgeblasen werden, wenn die Expander.ContentTemplate
Expander
Erweiterung zum ersten Mal erweitert wird. Weitere Informationen finden Sie unter Create Expander content on demand.
Alternativ kann ein Expander
Code erstellt werden:
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;
Erstellen von Erweiterungsinhalten nach Bedarf
Expander
Inhalte können auf Bedarf erstellt werden, um auf die Expander
Erweiterung zu reagieren. Dies kann erreicht werden, indem Sie die Eigenschaft auf einen DataTemplate
Wert festlegen, der den Expander.ContentTemplate
Inhalt enthält:
<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>
In diesem Beispiel wird der Inhalt nur aufgeblasen, wenn die Expander
Expander
Erweiterung zum ersten Mal erweitert wird.
Der Vorteil dieses Ansatzes ist, dass wenn eine Seite mehrere Expander
Objekte enthält, der Inhalt Expander
nur dann erstellt wird, wenn er zum ersten Mal vom Benutzer erweitert wird.
Hinzufügen eines Erweiterungsindikators
Eine Image
Kann einer Expander
Kopfzeile hinzugefügt werden, um einen visuellen Hinweis auf den Erweiterungszustand bereitzustellen. Eine DataTrigger
kann an die Image
Eigenschaft angefügt werden, die die Source
Eigenschaft basierend auf dem Wert der Expander.IsExpanded
Eigenschaft ändert:
<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>
In diesem Beispiel wird standardmäßig das Image
expand
Symbol angezeigt:
Die IsExpanded
Eigenschaft wird true
, wenn die Kopfzeile gekippt wird, was dazu führt, dass das Expander
collapse
Symbol angezeigt wird:
Weitere Informationen zu Triggern finden Sie unter Xamarin.Forms Triggers.
Einbetten eines Expanders in einen Expander
Der Inhalt eines Expander
Steuerelements kann auf ein anderes Expander
Steuerelement festgelegt werden, um mehrere Erweiterungsebenen zu ermöglichen. Im folgenden XAML-Code wird ein Expander
anderes Expander
Objekt angezeigt:
<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>
In diesem Beispiel wird durch Tippen auf die Stammheader Expander
die Kopfzeile für das untergeordnete Element Expander
angezeigt:
Durch Tippen auf den untergeordneten Expander
Header wird der Inhalt aufgeblasen und angezeigt:
Definieren der Erweiterungs- und Reduzierenanimation
Die Animation, die auftritt, wenn ein Expander
Erweitern oder Reduzieren definiert werden kann, indem sie die ExpandAnimationEasing
und CollapseAnimationEasing
die Eigenschaften auf eine der in Xamarin.Forms oder benutzerdefinierten Beschleunigungsfunktionen enthaltenen Funktionen festlegen. Standardmäßig treten die Animationen für erweiterungs- und reduzierend über 250Ms auf. Diese Dauer kann jedoch geändert werden, indem Sie die ExpandAnimationLength
Werte festlegen und CollapseAnimationLength
eigenschaften uint
festlegen.
Im folgenden XAML wird ein Beispiel für die Definition der Animation gezeigt, die auftritt, wenn der Expander
Benutzer erweitert oder reduziert wird:
<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>
In diesem Beispiel beschleunigt die CubicIn
Beschleunigungsfunktion langsam die Erweiterungsanimation über 500Ms, und die CubicOut
Beschleunigungsfunktion verzögert schnell die Reduziertanimation über 500Ms.
Weitere Informationen zu Easing-Funktionen finden Sie unter Xamarin.Forms Easing-Funktionen.
Ändern der Größe eines Expanders zur Laufzeit
Eine Expander
programmgesteuerte Größenänderung kann zur Laufzeit mit der ForceUpdateSize
Methode geändert werden.
Angesichts eines Expander
benannten Inhalts expander
, dessen Inhalt einen Label
TapGestureRecognizer
angefügten Inhalt enthält, zeigt das folgende Codebeispiel den Aufruf der ForceUpdateSize
Methode:
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();
}
In diesem Beispiel wird die FontSize
Label
Änderung vorgenommen, wenn der Label
Tipp erfolgt. Aufgrund der Größe der Schriftart, die sich ändert, ist es notwendig, die Größe Expander
der Schriftart zu aktualisieren, indem sie die ForceUpdateSize
Methode aufruft.
Deaktivieren eines Erweiterungsfelds
Eine Anwendung kann einen Zustand eingeben, in dem das Erweitern eines Expander
gültigen Vorgangs nicht vorhanden ist. In solchen Fällen kann die Expander
Eigenschaft durch Festlegen der IsEnabled
Eigenschaft auf "false" deaktiviert werden. Dadurch wird verhindert, dass Benutzer das Erweitern oder Reduzieren der Expander
.