Сводка по главе 6. Нажатия кнопки
Примечание.
Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.
Button
— это представление, позволяющее пользователю инициировать команду. Button
определяется текстом (и, при необходимости, изображением, как показано в главе 13 "Растровые изображения"). Следовательно, Button
определяет множество тех же свойств, что и Label
:
Button
также определяет три свойства, которые регулируют внешний вид его границы, но поддержка этих свойств и их взаимная независимость является платформенно-зависимой:
BorderColor
типаColor
BorderWidth
типаDouble
BorderRadius
типаDouble
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
:
Сохранение временных данных
Многие приложения должны сохранять данные при завершении программы и перезагружать эти данные при повторном запуске программы. Класс 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"Параметры ".