[XAMARIN.FORMS] Preview de Xamarin.Forms para Windows XAML

sticker-with-textPicture1dotnetconf-logo-300x290

El 19 de Marzo pasado, James Montemagno junto con Miguel de Icaza y Scott Hanselman presentaron durante la DotNetConf 2015 la versión preview de Xamarin.Forms para Windows Phone 8.1 y Windows Store. Puedes ver el video de la presentación en Channel9.

Este es un anuncio largamente esperado. Hasta ahora, Xamarin.Forms solo soportaba Windows Phone 8.0, lo que en ciertas ocasiones evitaba poder usarlo.

Aunque todavía está en modo preview, ya nos permite jugar con lo que vendrá en un futuro y empezar a añadir aplicaciones universales windows a nuestros proyectos Xamarin.Forms.

Probando la nueva preview

Para comenzar, necesitaremos crear un nuevo proyecto de Xamarin.Forms desde Visual Studio, en su versión Portable:

image

A continuación, aunque no es totalmente necesario, es recomendable actualizar las librerías de Xamarin.Forms a la última versión disponible. Para ello, solo tendremos que hacer click derecho sobre la solución en el explorador de solución y escoger la opción “Manage NuGet Packages for solution…”. Tenemos que cambiar el canal de “Stable only” a “Include prerelease”. En Updates veremos nuevas versiones de Xamarin.Forms y Xamarin Support Library y un botón “Update All”:

image

Tras tener la última versión de nuestras librerías para Xamarin.Forms, es hora de incluir el soporte a Windows Phone 8.1 y Windows Store.

Para ello, primero necesitamos añadir un nuevo proyecto universal Windows a nuestra solución Xamarin.Forms. Una vez que lo tengamos, podemos eliminar el proyecto de Windows Phone 8 que Xamarin.Forms incluye por defecto, ya no lo vamos a necesitar más.

Tras esto, tenemos que hacer click derecho sobre la solución y de nuevo lanzar el gestor de paquetes de NuGet. Buscaremos un paquete llamado Xamarin.Forms.Windows. Como estamos trabajando con una preview, tendremos que indicarle a NuGet que busque en software prerelease también:

XFW

Una vez seleccionado, NuGet nos preguntará en que proyectos queremos añadirlo. Por defecto nos mostrará los proyectos universales seleccionados:

xfw2

Tras aceptar, ya tendremos las librerías necesarias para que nuestro proyecto universal soporte Xamarin.Forms. Pero todavía nos quedan dos pasos, antes de empezar a escribir código.

Por defecto, la librería portable que crea Xamarin.Forms, no soporta Windows Phone 8.1 (Windows XAML):

image

Tenemos que añadir el soporte para Windows 8.1 y Windows Phone 8.1 y eliminar el soporte a Windows Phone Silverlight 8:

image

Al hacer esto, nos avisará de que al presionar OK se recargará el proyecto. Tras la recarga, ya podremos añadir una referencia al proyecto Portable en nuestros proyectos Windows y Windows Phone 8.1 (universal). En este punto, si compilamos, todo debería compilar sin problemas.

Para dejar todo funcionando, necesitamos indicarle a nuestra app universal que debe inicializar Xamarin.Forms, al igual que lo hacemos en el resto de proyectos, en la página principal.

Iniciando Xamarin.Forms en un proyecto Windows Universal

En el archivo App.xaml.cs, en el método OnLaunched, vamos a iniciar el sistema de Xamarin.Forms:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
        rootFrame = new Frame();
        rootFrame.CacheSize = 1;

        //Initialize Xamarin.Forms
        global::Xamarin.Forms.Forms.Init(e);

        Window.Current.Content = rootFrame;
    }

En el archivo MainPage.xaml del proyecto Windows, tenemos que cambiar el tipo de la página, para usar el tipo WindowsBasePage definido en los ensamblados de Xamarin.Forms:

<forms:WindowsPage
    x:Class=«XamarinForWinStore.WinUniversal.MainPage»
    xmlns:forms=«using:Xamarin.Forms.Platform.WinRT»

En el code behind de esta misma página, tenemos que quitar la herencia de la clase Page y añadir una llamada a LoadApplication en el constructor:

public sealed partial class MainPage
{
    public MainPage()
    {
        this.InitializeComponent();

        this.NavigationCacheMode = NavigationCacheMode.Required;

        LoadApplication(new XamarinForWinStore.App());
    }
}

Repetimos el mismo proceso en el proyecto Windows Phone, solo que esta vez usaremos WindowsPhonePage en lugar de WindowsPage.

Y ya estamos listos!

Si marcamos el proyecto Windows Store como proyecto de inicio y ejecutamos, veremos que nos saludan Xamarin.Forms:

image

Todavía falta camino…

Esta preview es un gran avance y nos permite empezar a jugar con Xamarin.Forms en más plataformas, pero está lejos de estar completa. Algunas de las cosas que faltan:

  • Mapas: No están soportados en esta versión.
  • GridView: El control estrella de Windows Store, no está soportado.
  • Controles: No todos los renderizadores de controles están completos en esta versión.
  • Recursos: WinRT no permite cargar recursos desde un ensamblado diferente a no ser que lo marquemos correctamente con ReflectionPermission. Esto no es compatible con PCL.

Como decía, todavía falta camino por recorrer, pero es un gran paso en la dirección correcta. ¿Qué nos deparará el //Build 2015? Estaré allí en persona para contaros todas las novedades!

Como siempre, tenéis disponible el código en GitHub para que podáis empezar a trastear con él.

Un saludo y Happy Coding!

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *