Сводка по главе 6. Нажатия кнопки

Download Sample Скачайте пример

Примечание.

Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.

Button — это представление, позволяющее пользователю инициировать команду. Button определяется текстом (и, при необходимости, изображением, как показано в главе 13 "Растровые изображения"). Следовательно, Button определяет множество тех же свойств, что и Label:

Button также определяет три свойства, которые регулируют внешний вид его границы, но поддержка этих свойств и их взаимная независимость является платформенно-зависимой:

Button также наследует все свойства VisualElement и View, включая BackgroundColor, HorizontalOptions и VerticalOptions.

Обработка щелчка

Класс Button определяет событие Clicked, которое запускается при нажатии пользователем кнопки Button. Обработчик Click имеет тип EventHandler. Первым аргументом является объект Button, создающий событие. Вторым аргументом является объект EventArgs, который не предоставляет дополнительных сведений.

В примере ButtonLogger демонстрируется простая обработка Clicked.

Нажатия кнопки общего доступа

Несколько представлений Button могут совместно использовать один и тот же обработчик Clicked, но обычно обработчику необходимо определить, какой Button отвечает за определенное событие. Один из подходов состоит в том, чтобы хранить различные объекты Button в виде полей и проверять, какие из них обрабатывали событие в обработчике.

Этот метод демонстрируется в примере TwoButtons. Программа также демонстрирует, как задать свойство IsEnabled для Button в false, когда нажатие клавиши Button перестает быть действенным. Отключенный Button не создает событие Clicked.

Анонимные обработчики событий

Можно определить обработчики Clicked как анонимные лямбда-функции, как показывает пример ButtonLambdas. Однако анонимные обработчики не могут совместно использоваться без какого-либо кода с более запутанным отражением.

Различение представлений с помощью идентификаторов

Несколько объектов Button также можно различить путем установки свойства StyleId или AutomationId в string. Это свойство определяется Element, но не используется в Xamarin.Forms. Оно предназначено исключительно для использования программами приложений.

В примере SimplestKeypad используется один и тот же обработчик событий для всех 10 числовых клавиш на цифровой клавиатуре, который различается с помощью свойства StyleId:

Triple screenshot of simplest keypad

Сохранение временных данных

Многие приложения должны сохранять данные при завершении программы и перезагружать эти данные при повторном запуске программы. Класс Application определяет несколько элементов, которые помогают программе сохранять и восстанавливать временные данные.

  • Свойство Properties — это словарь с ключами string и элементами object. Содержимое словаря автоматически сохраняется в локальном хранилище приложения перед завершением программы и перезагружается при запуске программы.
  • Класс Application определяет три защищенных виртуальных метода, переопределяемых стандартным классом App программы: OnStart, OnSleep и OnResume. Они относятся к событиям жизненного цикла приложения.
  • Метод SavePropertiesAsync сохраняет содержимое словаря.

Не нужно вызывать SavePropertiesAsync. Содержимое словаря автоматически сохраняется перед завершением программы и извлекается при ее запуске. Это полезно во время тестирования программы для сохранения данных в случае сбоя.

Также полезно:

  • Application.Current — статическое свойство, возвращающее текущий объект Application, который затем можно использовать для получения словаря Properties.

Первым шагом является указание всех переменных на странице, которые необходимо сохранить при завершении программы. Если вы знаете все места, в которых изменяются эти переменные, можете просто добавить их в словарь Properties. В конструкторе страницы можно задать переменные из словаря Properties, если ключ существует.

Более крупной программе, вероятно, придется иметь дело с событиями жизненного цикла приложения. Самым важным является метод OnSleep. Вызов этого метода означает, что программа ушла с переднего плана. Возможно, пользователь нажимает кнопку Главная на устройстве, отображает все приложения или завершает работу телефона. Вызов OnSleep является единственным уведомлением, которое программа получает перед завершением работы. Программа должна принять эту возможность, чтобы гарантировать актуальность словаря Properties.

Вызов OnResume указывает на то, что программа не завершилась после последнего вызова OnSleep, а теперь снова выполняется на переднем плане. Эта возможность может использоваться программой для обновления подключений к Интернету (например).

Вызов OnStart происходит во время запуска программы. Поскольку содержимое уже было восстановлено при вызове конструктора App, не нужно ждать, пока этот вызов метода попытается получить доступ к словарю Properties.

Пример PersistentKeypad очень похож на SimplestKeypad, за исключением того, что программа использует переопределение OnSleep для сохранения текущей записи клавиатуры, а конструктор страниц — для восстановления этих данных.

Примечание.

Другой подход к сохранению параметров программы предоставляется классом Xamarin.Essentials"Параметры ".