Recursos a nivel de aplicación en Xamarin Forms

Clase 30 de 83Curso de Xamarin 2018

Hemos usado los recursos solamente dentro de una página, de hecho, los recursos, tal como están definidos en este momento, sólo pueden ser usados dentro de la página donde están definidos. Al ser definidos como recursos de la página, su ámbito o scope es solamente el de los elementos definidos dentro de la página misma. Este quizás no sea aún el escenario óptimo. Aunque hemos logrado reutilizar recursos XAML, con la estructura actual, aún tendríamos que duplicar estos recursos por cada página dentro de nuestra aplicación para que los colores se puedan reutilizar.

Recursos a nivel de aplicación

O podemos definir los colores como recursos de la aplicación completa, y no sólo de una página. Esto lo podemos hacer desde App.xaml.

Tal como definimos los recursos dentro del NuevoItemPage.xaml, los podemos definir en el archivo App.xaml, asegurándonos de que ahora éstos estarán disponibles a lo largo de toda la aplicación:

<Application.Resources> <ResourceDictionary> <Color x:Key="accentColor">#7FC719</Color> <Color x:Key="buttonTextColor">#FFFFFF</Color> </ResourceDictionary> </Application.Resources>

Ahora, podemos regresar al XAML anterior, borrar los recursos, y aún así podremos usar accentColor y buttonTextColor, esta vez obtenidos desde la clase App.

Teniendo los recursos a nivel de clase nos permite abrir otra página, por ejemplo la ToDoListPage.xaml, y usar los recursos en el botón de inicio de sesión y el color del texto de los Entries:

<Entry x:Name="usuarioEntry" TextColor="{StaticResource accentColor}" Placeholder="usuario"/> <Entry x:Name="contraseñaEntry" Placeholder="contraseña" TextColor="{StaticResource accentColor}" IsPassword="true"/> <Button Text="iniciar sesión" BackgroundColor="{StaticResource accentColor}" TextColor="{StaticResource buttonTextColor}" Clicked="Handle_Clicked"/> <Label x:Name="resultadoLabel" HorizontalOptions="Center”/>

Screen Shot 2017-06-12 at 10.54.34 AM.png

Y así, hemos ahorrado un poco más de código al reutilizarlo directamente desde los recursos de la aplicación, sin necesidad de definir recursos dentro de cada página. Si quisieras ocupar este recurso dentro de la lista, podrías por ejemplo asignarlo a la propiedad DetailColor del TextCell.

DetailColor="{StaticResource accentColor}

Screen Shot 2017-06-12 at 11.12.06 AM.png

Y tal como lo hicimos con los recursos dentro de la página, la siguiente vez que necesites cambiar los colores de tu aplicación, sólo necesitarás cambiarlos una vez, dentro del App.xaml.