Zusammenfassung von Kapitel 6: Schaltflächenklicks

Download Sample Das Beispiel herunterladen

Hinweis

Dieses Buch wurde im Frühjahr 2016 veröffentlicht und seitdem nicht aktualisiert. Wenngleich ein großer Teil des Buchs weiterhin relevante Informationen liefert, sind einige Abschnitte veraltet, und einige Themen sind nicht mehr korrekt oder vollständig.

Ein Button-Element stellt die Ansicht dar, mit der Benutzer einen Befehl initiieren können. Ein Button wird durch Text identifiziert (optional auch durch ein Bild, wie in Kapitel 13: Bitmaps ersichtlich). Somit werden durch Button viele der Eigenschaften definiert, die auch durch Label definiert werden:

Durch Button werden auch drei Eigenschaften definiert, die die Darstellung des Rahmens der Schaltfläche steuern. Die Unterstützung dieser Eigenschaften und ihrer gegenseitigen Unabhängigkeit ist jedoch plattformspezifisch:

Button erbt zudem alle Eigenschaften von VisualElement und View, einschließlich BackgroundColor, HorizontalOptions und VerticalOptions.

Verarbeiten des Klicks

Mit der Button-Klasse wird ein Clicked-Ereignis definiert, das durch Tippen des Benutzers auf den Button ausgelöst wird. Der Click-Handler ist vom Typ EventHandler. Das erste Argument ist das Button-Objekt, das das Ereignis erzeugt. Das zweite Argument ist ein EventArgs-Objekt, das keine zusätzlichen Informationen bereitstellt.

Im Beispiel ButtonLogger wird die einfache Verarbeitung von Clicked veranschaulicht.

Freigeben von Schaltflächenklicks

Mehrere Button-Ansichten können denselben Clicked-Handler verwenden. Jedoch muss der Handler im Allgemeinen bestimmen, welcher Button für ein bestimmtes Ereignis verantwortlich ist. Eine Möglichkeit besteht darin, die unterschiedlichen Button-Objekte als Felder zu speichern und zu prüfen, durch welches das Ereignis im Handler ausgelöst wird.

Diese Prozedur wird im Beispiel TwoButtons veranschaulicht. Es wird zudem gezeigt, wie die IsEnabled-Eigenschaft eines Button auf false festgelegt wird, wenn das Klicken auf den Button nicht mehr gültig ist. Über einen deaktivierten Button wird kein Clicked-Ereignis generiert.

Anonyme Ereignishandler

Clicked-Handler können auch, wie im Beispiel ButtonLambdas veranschaulicht, als anonyme Lambdafunktionen definiert werden. Anonyme Handler können jedoch nur mit unübersichtlichem Reflektionscode freigegeben werden.

Unterscheiden von Ansichten mit IDs

Mehrere Button-Objekte können auch durch Festlegen der Eigenschaften StyleId oder AutomationId auf einen string unterschieden werden. Diese Eigenschaft wird durch Element definiert. Sie wird in Xamarin.Forms jedoch nicht verwendet. Sie wird ausschließlich in Anwendungsprogrammen verwendet.

Im Beispiel SimplestKeypad wird derselbe Ereignishandler für alle zehn Zifferntasten auf einer Zehnertastatur verwendet, die über die Eigenschaft StyleId unterschieden werden:

Triple screenshot of simplest keypad

Speichern vorübergehender Daten

Viele Anwendungen müssen beim Beenden eines Programms Daten speichern, die beim nächsten Programmstart nochmals geladen werden. In der Klasse Application werden mehrere Member definiert, mit denen das Programm vorübergehende Daten speichern und wiederherstellen kann:

  • Die Properties-Eigenschaft ist ein Wörterbuch mit string-Schlüsseln und object-Elementen. Der Inhalt des Wörterbuchs wird vor Beendigung des Programms automatisch im lokalen Anwendungsspeicher gespeichert und noch mal geladen, wenn das Programm gestartet wird.
  • In der Application-Klasse werden drei geschützte virtuelle Methoden definiert, die von der App-Standardklasse des Programms überschrieben werden: OnStart, OnSleep und OnResume. Diese beziehen sich auf Ereignisse des Anwendungslebenszyklus.
  • Mit der Methode SavePropertiesAsync wird der Inhalt des Wörterbuchs gespeichert.

Der Aufruf von SavePropertiesAsync ist nicht erforderlich. Der Inhalt des Wörterbuchs wird vor Beendigung des Programms automatisch gespeichert und vor einem erneuten Programmstart abgerufen. Während Sie das Programm testen, ist es nützlich, Ihre Daten für den Fall eines Programmabsturzes zu speichern.

Folgende Option kann ebenfalls nützlich sein:

  • Application.Current: eine statische Eigenschaft, die das aktuelle Application-Objekt zurückgibt. Mit diesem Objekt können Sie anschließend das Properties-Wörterbuch abrufen.

Identifizieren Sie zunächst auf der Seite alle Variablen, die beim Beenden des Programms beibehalten werden sollen. Wenn Sie bereits alle Stellen kennen, an denen sich diese Variablen ändern, können Sie sie einfach zu diesem Zeitpunkt dem Properties-Wörterbuch hinzufügen. Im Seitenkonstruktor können Sie die Variablen aus dem Properties-Wörterbuch festlegen, sofern der Schlüssel vorhanden ist.

Größere Programme müssen vermutlich in der Lage sein, mit Ereignissen des Anwendungslebenszyklus umzugehen. Das wichtigste Ereignis ist dabei die OnSleep-Methode. Ein Aufruf dieser Methode zeigt an, dass das Programm nicht mehr im Vordergrund ausgeführt wird. Möglicherweise hat der Benutzer zuvor auf dem Gerät auf die Schaltfläche Start geklickt, alle Anwendungen angezeigt oder das Smartphone heruntergefahren. Ein Aufruf von OnSleep ist die einzige Benachrichtigung, die ein Programm erhält, bevor es beendet wird. Dies ist die letzte Möglichkeit für das Programm zu überprüfen, ob das Properties-Wörterbuch auf dem neuesten Stand ist.

Ein Aufruf von OnResume zeigt an, dass das Programm nach dem letzten Aufruf von OnSleep nicht beendet wurde, sondern noch mal im Vordergrund ausgeführt wird. Bei dieser Gelegenheit kann das Programm (beispielsweise) Internetverbindungen aktualisieren.

Zu einem Aufruf von OnStart kommt es während des Programmstarts. Sie müssen nicht bis zum Aufruf dieser Methode warten, bevor Sie auf das Properties-Wörterbuch zugreifen, da dessen Inhalt bereits beim Aufruf des App-Konstruktors wiederhergestellt wurde.

Die Beispiele PersistentKeypad und SimplestKeypad ähneln sich sehr. Der einzige Unterschied besteht darin, dass das Programm die Überschreibung durch OnSleep dazu verwendet, den aktuellen Tastatureintrag zu speichern sowie den Seitenkonstruktor, um diese Daten wiederherzustellen.

Hinweis

Ein weiterer Ansatz zum Speichern von Programmeinstellungen wird von der Xamarin.EssentialsEinstellungsklasse bereitgestellt.