Resumen del capítulo 6. Clics de botón
Nota:
Este libro se publicó en la primavera de 2016 y no se ha actualizado desde entonces. Gran parte del libro sigue siendo útil, pero algunos de los materiales están anticuados y algunos temas ya no son completamente correctos o completos.
Button
es la vista que permite al usuario iniciar un comando. Un elemento Button
se identifica mediante texto (y, opcionalmente, una imagen, como se muestra en Capítulo 13, Mapas de bits). Por consiguiente, Button
define muchas de las mismas propiedades que Label
:
Button
también define tres propiedades que rigen la apariencia de su borde, pero la compatibilidad de estas propiedades y su independencia mutua son específicas de la plataforma:
BorderColor
de tipoColor
BorderWidth
de tipoDouble
BorderRadius
de tipoDouble
Button
también hereda todas las propiedades de VisualElement
y View
, incluidas BackgroundColor
, HorizontalOptions
y VerticalOptions
.
Procesamiento del clic
La clase Button
define un evento Clicked
que se desencadena cuando el usuario pulsa Button
. El controlador Click
es de tipo EventHandler
. El primer argumento es el objeto Button
que genera el evento; el segundo argumento es un objeto EventArgs
que no proporciona información adicional.
En el ejemplo ButtonLogger se muestra el control de Clicked
sencillo.
Uso compartido de los clics del botón
Varias vistas de Button
pueden compartir el mismo controlador de Clicked
, pero el controlador generalmente debe determinar qué Button
es responsable de un evento determinado. Un enfoque consiste en almacenar los distintos objetos Button
como campos y comprobar cuál es el que activa el evento en el controlador.
En el ejemplo TwoButtons se muestra esta técnica. El programa también muestra cómo establecer la propiedad IsEnabled
de Button
a false
cuando ya no sirve presionar Button
. Un elemento Button
deshabilitado no genera un evento Clicked
.
Controladores de eventos anónimos
Es posible definir controladores de Clicked
como funciones lambda anónimas, como se muestra en el ejemplo ButtonLambdas. Sin embargo, los controladores anónimos no se pueden compartir sin código de reflexión desordenado.
Distinción de las vistas con identificadores
También se pueden distinguir varios objetos Button
si se establece la propiedad StyleId
o AutomationId
en string
. Esta propiedad está definida por Element
, pero no se usa en Xamarin.Forms. Está diseñada para utilizarse únicamente por los programas de la aplicación.
En el ejemplo SimplestKeypad se usa el mismo controlador de eventos para las 10 claves numéricas de un teclado numérico y se distingue entre ellas con la propiedad StyleId
:
Guardado de datos transitorios
Muchas aplicaciones necesitan guardar datos cuando se termina un programa y volver a cargarlos cuando el programa se inicia de nuevo. La clase Application
define varios miembros que ayudan al programa a guardar y restaurar datos transitorios:
- La propiedad
Properties
es un diccionario con claves destring
y elementos deobject
. El contenido del diccionario se guarda automáticamente en el almacenamiento local de la aplicación antes de la finalización del programa y se vuelve a cargar cuando se inicia el programa. - La clase
Application
define tres métodos virtuales protegidos que reemplaza la claseApp
estándar del programa:OnStart
,OnSleep
yOnResume
. Hacen referencia a los eventos del ciclo de vida de la aplicación. - El método
SavePropertiesAsync
guarda el contenido del diccionario.
No es necesario llamar a SavePropertiesAsync
. El contenido del diccionario se guarda automáticamente antes de la finalización del programa y se recupera antes del inicio del programa. Resulta útil durante las pruebas de los programas para guardar datos si el programa se bloquea.
También es útil:
Application.Current
, una propiedad estática que devuelve el objetoApplication
actual que se puede usar para obtener el diccionario deProperties
.
El primer paso es identificar todas las variables de la página que desea conservar cuando finaliza el programa. Si conoce todos los lugares en los que cambian esas variables, puede agregarlos simplemente al diccionario de Properties
en ese momento. En el constructor de la página, puede establecer las variables del diccionario de Properties
si la clave existe.
Un programa mayor probablemente necesitará tratar con los eventos del ciclo de vida de la aplicación. El más importante es el método OnSleep
. Una llamada a este método indica que el programa ha dejado el primer plano. Es posible que el usuario haya presionado el botón Inicio en el dispositivo, que muestre todas las aplicaciones o que esté cerrando el teléfono. Una llamada a OnSleep
es la única notificación que un programa recibe antes de que finalice. El programa debe aprovechar esta oportunidad para asegurarse de que el diccionario de Properties
esté actualizado.
Una llamada a OnResume
indica que el programa no terminó después de la última llamada a OnSleep
pero que ahora se está ejecutando en primer plano de nuevo. El programa podría usar esta oportunidad para actualizar las conexiones a Internet (por ejemplo).
Se produce una llamada a OnStart
durante el inicio del programa. No es necesario esperar hasta esta llamada de método para tener acceso al diccionario de Properties
porque ya se ha restaurado el contenido al llamar al constructor App
.
El ejemplo PersistentKeypad es muy similar aSimplestKeypad, salvo que el programa utiliza la invalidación OnSleep
para guardar la entrada del teclado actual y el constructor de página para restaurar los datos.
Nota:
Otro enfoque para guardar la configuración del programa lo proporciona la clase Xamarin.EssentialsPreferences.