ImageButton
Die .NET Multi-Platform App UI (.NET MAUI) ImageButton-Ansicht kombiniert die Button-Ansicht und die Image-Ansicht, um eine Schaltfläche mit einem Bild als Inhalt zu erstellen. Wenn Sie mit einem Finger auf den ImageButton drücken oder mit der Maus darauf klicken, weist er die App an, eine Aufgabe auszuführen. Im Unterschied zum Button beinhaltet die ImageButton-Ansicht jedoch kein Konzept für Text und Textdarstellung.
ImageButton definiert die folgenden Eigenschaften:
Aspect
vom TypAspect
legt fest, wie das Bild skaliert wird, damit es in den Anzeigebereich passt.BorderColor
vom Typ Color beschreibt die Farbe des Rahmens der Schaltfläche.BorderWidth
vom Typdouble
definiert die Breite des Rahmens der Schaltfläche.Command
vom Typ ICommand definiert den Befehl, der ausgeführt wird, wenn die Schaltfläche angetippt wird.CommandParameter
vom Typobject
ist der Parameter, der an denCommand
übergeben wird.CornerRadius
vom Typint
beschreibt den Eckenradius der Schaltfläche.IsLoading
vom Typbool
steht für den Ladestatus des Bildes. Der Standardwert dieser Eigenschaft istfalse
.IsOpaque
vom Typbool
legt fest, ob .NET MAUI das Bild beim Rendern als „nicht transparent“ behandeln soll. Der Standardwert dieser Eigenschaft istfalse
.IsPressed
vom Typbool
zeigt an, ob die Schaltfläche gedrückt ist. Der Standardwert dieser Eigenschaft istfalse
.Padding
vom TypThickness
bestimmt den Abstand der Schaltfläche.Source
vom Typ ImageSource gibt ein Bild an, das als Inhalt der Schaltfläche angezeigt wird.
Diese Eigenschaften werden von BindableProperty-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.
Die Aspect
-Eigenschaft kann auf eines der Member der Aspect
- Enumeration gesetzt werden:
Fill
– streckt das Bild so, dass es den ImageButton vollständig und exakt ausfüllt. Dies kann zu einer Verzerrung des Bildes führen.AspectFill
– beschneidet das Bild so, dass es den ImageButton ausfüllt und das Seitenverhältnis dabei beibehalten wird.AspectFit
wendet (falls erforderlich) das Letterboxformat auf das Bild an, damit das Bild in den ImageButton passt, wobei abhängig davon, ob das Bild breit oder hoch ist, Leerraum am oberen bzw. unteren Rand oder seitlich hinzugefügt wird. Dies ist der Standardwert derAspect
-Enumeration.Center
zentriert das Bild im ImageButton unter Beibehaltung des Seitenverhältnisses.
Darüber hinaus definiert er ImageButton-, Clicked
-, Pressed
- und Released
-Ereignisse. Das Clicked
-Ereignis wird beim-Antippen des ImageButton mit einem Finger oder Mauszeiger in dem Moment ausgelöst, in dem sich der Finger oder der Mauszeiger von der Oberfläche der Schaltfläche löst. Das Pressed
-Ereignis wird ausgelöst, wenn ein Finger auf einen ImageButton drückt oder eine Maustaste gedrückt wird, während der Mauszeiger über dem ImageButton positioniert ist. Das Ereignis Released
wird ausgelöst, wenn der Finger nicht mehr drückt oder die Maustaste losgelassen wird. Im Allgemeinen wird ein Clicked
-Ereignis auch gleichzeitig mit dem Released
-Ereignis ausgelöst. Wenn der Finger oder der Mauszeiger jedoch vor dem Loslassen von der Oberfläche des ImageButton weg gleitet, tritt das Clicked
-Ereignis möglicherweise nicht auf.
Wichtig
Die IsEnabled
-Eigenschaft eines ImageButton muss auf true
festgelegt sein, damit er auf Tippen reagiert.
Erstellen eines ImageButton
Um eine Bildschaltfläche zu erstellen, erstellen Sie ein ImageButton-Objekt, legen Sie dessen Source
-Eigenschaft und einen Handler für dessen Clicked
-Ereignis fest.
Das folgende XAML-Beispiel zeigt, wie eine ImageButton erstellt wird:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ControlGallery.Views.XAML.ImageButtonDemoPage"
Title="ImageButton Demo">
<StackLayout>
<ImageButton Source="image.png"
Clicked="OnImageButtonClicked"
HorizontalOptions="Center"
VerticalOptions="Center" />
</StackLayout>
</ContentPage>
Die Source
-Eigenschaft gibt das Bild an, das auf dem ImageButton angezeigt wird. Das Clicked
-Ereignis wird auf einen Ereignishandler mit dem Namen OnImageButtonClicked
festgelegt. Dieser Handler befindet sich in der CodeBehind-Datei:
public partial class ImageButtonDemoPage : ContentPage
{
int clickTotal;
public ImageButtonDemoPage()
{
InitializeComponent();
}
void OnImageButtonClicked(object sender, EventArgs e)
{
clickTotal += 1;
label.Text = $"{clickTotal} ImageButton click{(clickTotal == 1 ? "" : "s")}";
}
}
Wenn auf den ImageButton getippt wird, wird die OnImageButtonClicked
-Methode ausgeführt. Das sender
-Argument ist der ImageButton, der für dieses Ereignis verantwortlich ist. Sie können dies verwenden, um auf das ImageButton-Objekt zuzugreifen oder zwischen mehreren ImageButton-Objekten mit dem gleichen Clicked
-Ereignis zu unterscheiden. Der Clicked
-Handler erhöht einen Zähler und zeigt den Zählerwert in einem Label an:
Der entsprechende C#-Code zum Erstellen eines ImageButton lautet:
Label label;
int clickTotal = 0;
...
ImageButton imageButton = new ImageButton
{
Source = "XamarinLogo.png",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
};
imageButton.Clicked += (s, e) =>
{
clickTotal += 1;
label.Text = $"{clickTotal} ImageButton click{(clickTotal == 1 ? "" : "s")}";
};
Verwenden der Befehlsschnittstelle
Eine App kann auf ImageButton-Tippen reagieren, ohne das Clicked
-Ereignis zu behandeln. Der ImageButton implementiert einen alternativen Benachrichtigungsmechanismus, der als Befehls- oder Kommandoschnittstelle bezeichnet wird. Dies besteht aus zwei Eigenschaften:
Command
vom Typ ICommand, eine im NamespaceSystem.Windows.Input
definierte Schnittstelle.CommandParameter
-Eigenschaft vom TypObject
.
Dieser Ansatz eignet sich in Verbindung mit der Datenbindung und insbesondere bei der Implementierung des MVVM-Musters (Model View ViewModel). Weitere Informationen zu Befehlen finden Sie unter Verwenden der Befehlsschnittstelle im Artikel Schaltfläche.
Drücken und Freigeben eines ImageButton-Ereignisses
Das Ereignis Pressed
wird ausgelöst, wenn ein Finger ImageButton drückt oder eine Maustaste gedrückt wird, wobei der Mauszeiger über ImageButton positioniert ist. Das Ereignis Released
wird ausgelöst, wenn der Finger nicht mehr drückt oder die Maustaste losgelassen wird. Im Allgemeinen wird das Ereignis Clicked
auch gleichzeitig mit dem Ereignis Released
ausgelöst, aber wenn der Finger oder der Mauszeiger vor dem Loslassen von ImageButton von der Oberfläche entfernt wird, tritt das Ereignis Clicked
möglicherweise nicht auf.
Weitere Informationen zu diesen Ereignissen finden Sie unter Drücken und Freigeben der Schaltfläche im Artikel Schaltfläche.
Visuelle Zustände von ImageButton
ImageButton verfügt über einen Pressed
VisualState, der verwendet werden kann, um beim Drücken eine visuelle Änderung an der ImageButton zu initiieren, wenn sie aktiviert ist.
Das folgende XAML-Beispiel zeigt, wie ein visueller Zustand für den Zustand Pressed
definiert wird:
<ImageButton Source="image.png"
...>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="Scale"
Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Pressed">
<VisualState.Setters>
<Setter Property="Scale"
Value="0.8" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="PointerOver" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</ImageButton>
In diesem Beispiel gibt der Pressed
VisualState an, dass beim Drücken von ImageButton die Eigenschaft Scale
von ihrem Standardwert 1 auf 0,8 geändert wird. Der Normal
VisualState gibt an, dass die Eigenschaft Scale
der ImageButton auf 1 festgelegt wird, wenn sie sich in einem normalen Zustand befindet. Daher ist der Gesamteffekt, dass beim Drücken von ImageButton die Skalierung etwas kleiner ist. Wenn ImageButton losgelassen wird, wird wieder auf die Standardgröße skaliert.
Wichtig
Damit ImageButton wieder in den Normal
-Zustand zurückkehrt, muss auch VisualStateGroup
einen PointerOver
-Zustand definieren. Wenn Sie die von der Projektvorlage der .NET MAUI-App erstellten ResourceDictionary
-Formatvorlagen verwenden, verfügen Sie bereits über eine implizite ImageButton
-Formatvorlage, die den PointerOver
-Zustand definiert.
Weitere Informationen zu visuellen Zuständen finden Sie unter Visuelle Zustände.
Deaktivieren eines ImageButton-Elements
Manchmal wechselt eine App in einen Zustand, in dem ein ImageButton-Klick kein gültiger Vorgang ist. In solchen Fällen sollte ImageButton deaktiviert werden, indem die zugehörige IsEnabled
-Eigenschaft auf false
festgelegt wird.