Verwendung von Auslösern, um das Verhalten eines WPF-Steuerelements festzulegen
Hinweis: |
---|
Auslöser werden in Microsoft Silverlight-Projekten nicht unterstützt. Benutzerinteraktionen können in einer Silverlight-Anwendung über Ereignishandler oder Statusoptionen durchgeführt werden. Weitere Informationen finden Sie unter Ändern des Status als Reaktion auf eine Benutzerinteraktion. |
Während der Lebensdauer einer Anwendung ändert sich der Status von Objekten auf der Benutzeroberfläche. Der Status wird häufig aus der Sicht des Benutzers ausgedrückt. Beispiele: der Mouseover-Status einer Schaltfläche und der Gedrückt-Status eines Menüelements. Diese zwei Statusbeispiele werden jeweils mit der UIElement.IsMouseOver-Eigenschaft (Mauszeiger über UI-Element) und der MenuItem.IsPressed-Eigenschaft (Menüelement wurde gedrückt) auf Objekten implementiert.
Jedoch sind die Werte dieser Eigenschaften und somit der Status den sie repräsentieren, für den Benutzer nicht sichtbar. IsMouseOver und IsPressed sind keine visuellen Eigenschaften. Damit die Änderung an einer nicht visuellen Eigenschaft wahrgenommen wird, muss sie eine Änderung an einer visuellen Eigenschaft (z. B. Background oder Opacity) auslösen. Beispiele: Eine Schaltfläche wird im Mouseover-Status erhaben, im normalen Status flach angezeigt. Die Hintergrundfarbe eines Menüelements ändert sich, wenn darauf geklickt wird.
Objekte ändern nicht nur ihren Status, sondern lösen auch Ereignisse aus. Beispiel: Eine Schaltfläche löst die Ereignisse MouseEnter und MouseLeave aus, wenn der Zeiger die Begrenzungen der Schaltfläche kreuzt. Ein Ereignis hat ebenfalls kein eigenes Erscheinungsbild und muss daher eine Änderung an einer visuellen Eigenschaft auslösen, um vom Benutzer wahrgenommen zu werden.
Auslöser (und Animationszeitachsen) können im Stamm eines Dokuments oder in einem Stil erstellt werden, der auf ein Steuerelement angewendet wird. Sie können z. B. den Stil einer Schaltfläche ändern, um das Aussehen der Schaltfläche geringfügig zu ändern, wenn sich der Gedrückt- oder Rollover-Status ändert. Jede Schaltfläche, auf die der Stil angewendet ist, zeigt dasselbe Verhalten. Ein Beispiel finden Sie unter Weiterführende Themen: Hinzufügen einer Animation zu einer Schaltfläche.
Es gibt zwei Arten von Auslösern:
Eigenschaftsauslöser Mechanismus, mit dem eine Änderung an einer Eigenschaft eine sofortige oder animierte Änderung einer anderen Eigenschaft auslöst
Ereignisauslöser Mechanismus, mit dem ein Ereignis eine animierte Änderung in einer Eigenschaft auslöst
Das folgende Bild zeigt die Benutzeroberfläche für Auslöser mit zwei Eigenschaftsauslösern (IsMouseOver und IsPressed) sowie einem Ereignisauslöser (target-element.Loaded). Der IsMouseOver-Eigenschaftsauslöser ist ausgewählt und zeigt die geänderte Eigenschaft (Border.Background) und die ausgelöste Zeitachse (OnLoaded1) an.
Beispiele für das Arbeiten mit Triggern finden Sie unter Hinzufügen oder Entfernen eines Auslösers und Erstellen einer einfachen Animation.
Eigenschaftsauslöser
In einem Eigenschaftsauslöser sind eine Auslösebedingung und die Aktion definiert, die beim Zutreffen der Bedingung folgen soll. Bedingungsbeispiel: "IsMouseOver property of button1 is true." Beispielaktionen: "Set the Foreground property of button1 to Red and begin the animation named Expand, which scales the button up."
Das Einstellen der Foreground-Eigenschaft (Vordergrund) auf rot ist ein Beispiel für eine Aktion, die Eigenschaftssetter genannt wird Der Setter ist nur gültig, wenn die Bedingung erfüllt ist. Die Eigenschaft wird auf den vorherigen Wert zurückgesetzt, wenn die Bedingung nicht mehr erfüllt wird. Das Starten der Animation namens Expand ist ein Beispiel für eine Eingabeaktion. Die Aktion wird ausgeführt, wenn die Bedingung erfüllt ist. Eine Beendenaktion tritt auf, wenn die Bedingung nicht mehr erfüllt ist. Nur Animationen können über Eingabe- oder Beendenaktionen gesteuert werden. In der folgenden Abbildung wird der Lebenszyklus für diesen als Beispiel aufgeführten Eigenschaftsauslöser gezeigt.
Beachten Sie, dass der Setter ausreicht, um die Foreground-Eigenschaft (Vordergrund) während des gesamten Lebenszyklus zu steuern. Bei Schritt 5 wird der Vordergrund automatisch auf schwarz zurückgesetzt. Eigenschaftsanimationen, die über die Eingabeaktion durchgeführt werden, werden jedoch nicht wieder rückgängig gemacht. Bei Schritt 5 ist die Schaltfläche immer noch auf eine größere Größe skaliert. Dies kann durch das Entwerfen einer Animation zum Verkleinern gelöst werden, mit der die Schaltfläche wieder verkleinert wird. Diese neue Animation wird dann in einer Beendenaktion gestartet.
Eigenschaftsauslöser können nur in Stilen oder Vorlagen definiert werden. Es empfiehlt sich jedoch im Allgemeinen, die Auslöser in eine Vorlage einzubinden.
Ereignisauslöser
In einem Ereignisauslöser sind eine Auslösebedingung und die Aktion definiert, die beim Zutreffen der Bedingung folgen soll. Beispielbedingung: "The MouseEnter event is raised on button1." Beispielaktion: "Begin the animation named Expand which scales the button up."
Die Beispielaktion ist mit der Eingabeaktion identisch, die zuvor als Beispiel für den Eigenschaftsauslöser verwendet wurde. Ereignisauslöser haben nicht denselben Lebenszyklus wie Eigenschaftsauslöser. Sie führen lediglich Aktionen in Reaktion auf Ereignisse aus. Ein Ereignisauslöser besitzt demnach keine Eingabe- und Beendenaktionen, sondern nur Aktionen.
Um zu erreichen, dass eine Schaltfläche vergrößert wird, sobald sich der Zeiger innerhalb der Grenzen befindet, und zur normalen Größe zurückkehrt, sobald der Zeiger die Grenzen verlässt, müssen Sie zwei Ereignisauslöser mit gegensätzlichen Skalierungsanimationen definieren. Ereignisauslöser können in Stilen oder Vorlagen oder im LayoutRoot-Element definiert werden.
Eigenschaftsauslöser oder Ereignisauslöser?
Häufig steht einer Eigenschaft eine entsprechende Ereignisgruppe gegenüber, und Sie können entscheiden, ob Sie einen Eigenschaftsauslöser oder zwei Ereignisauslöser entwerfen möchten. Beispiel: Sie erzielen denselben Effekt mit einem IsMouseOver-Eigenschaftsauslöser oder den zwei komplementären Ereignisauslösern MouseEnter und MouseLeave. Verwenden Sie bevorzugt Eigenschaftsauslöser. Verwenden Sie Ereignisauslöser nur, wenn keine andere Möglichkeit besteht, zum Beispiel weil Sie sich außerhalb eines Stils oder einer Vorlage befinden. Um das Fehlen von Settern bei Ereignisauslöser zu kompensieren, können Sie zwei Animationen erstellen, deren Keyframes sich an der Zeitmarke null befinden.
Auslöser oder Ereignishandlermethode?
Mit Ereignishandlern können Sie dieselben Aktionen ausführen wie mit Auslösern. Zudem können Sie weitere Programmierlogik hinzufügen. Sie können beispielsweise Eigenschaften auf andere Elemente einstellen, neue Dokumente laden und neue Elemente erstellen. Dies liegt daran, dass Ereignishandlermethoden in der CodeBehind-Datei des Dokuments in C# oder Microsoft® Visual Basic® .NET definiert sind. Weitere Informationen finden Sie unter Schreiben von Code, der auf Ereignisse reagiert.
Eine Liste der Ereignisse, die Sie über Auslöser oder mit Ereignishandlermethoden einbinden können, finden Sie unter Steuerelemente, Eigenschaften und Ereignisverweise.