SlideShare una empresa de Scribd logo
1 de 40
EXTENDIENDO
XAMARIN.FORMS
Servicios de cada plataforma, controles
personalizados por plataforma, nuevos
controles, nuevas páginas y mucho más!
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
Javier Suárez
Microsoft MVP Windows Platform
Development
• Blog: http://geeks.ms/blogs/jsuarez
• Email: javiersuarezruiz@hotmail.com
• Twitter: @jsuarezruiz
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
PREGUNTAS FRECUENTES
¿Puedo utilizar APIs específicas de una plataforma
en concreto?
¿Puedo personalizar la apariencia o el
comportamiento de un control existente?
¿Puedo utilizar controles nativos de cada plataforma
con Xamarin.Forms?
¿Puedo personalizar la apariencia o el
comportamiento de un tipo de página existente?
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
¿QUÉ VAMOS A VER?
Un vistazo a la agenda
Un vistazo rápido a Xamarin.Forms.
Repasaremos que es, que beneficios
aporta y en que consiste.
Xamarin.Forms
Veremos como utilizer APIs específicas
de cada plataforma. Utilizaremos el
patron MVVM junto a DI y Servicios.
APIs específicas de la
plataforma
Crear nuevos controles, extender
controles y páginas existentes además
de utilizar controles nativos de cada
plataforma.
Custom Renders
Preguntas traen respuestas y
respuestas más preguntas. Al final de
la sesión tendremos unos minutos
para resolver todas las dudas que han
surgido.
Preguntas y Respuestas
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
Extender Xamarin.Forms nos permitirá añadir
funcionalidad, controles y páginas específicas
para cada plataforma logrando que nuestras
Apps se adapten a la perfección a las guías de
estilo de cada plataforma.
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
DESARROLLO CON XAMARIN
El enfoque tradicional
• La UI es específica de cada
plataforma.
• La lógica de la Aplicación es
en C# y compartida mediante
el uso de PCLs o proyectos
Shared.
• 70% aprox. De código
compartido.
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
XAMARIN y XAMARIN.FORMS
Comparativa
Con Xamarin.Forms:
Se comparte más, controles compartidos
El enfoque tradicional de Xamarin
Shared UI Code
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
XAMARIN.FORMS
¿Qué aporta?
• Permite crear facilmente y con
rapidez interfaces de usuario
nativas compartidas
• Los elementos de Xamarin.Forms
son mapeados a elementos
nativos y behaviors propios de
cada plataforma
• Podemos mezclar Xamarin.Forms
con APIs nativas
Shared UI Code
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
RAZONES PARA EXTENDER
XAMARIN.FORMSMotivos
• Modificar aspectos de la
UI.
• Aprovechar a fondo las
capacidades que nos
ofrece cada plataforma.
• Cubrir ciertas
necesidades con nuevos
controles o páginas.
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
PUNTOS DE EXTENSIÓN DE
XAMARIN.FORMS¿Qué podemos extender?
1. Servicos con
DependencyService
2. Extensiones XAML:
Markup Extensions
3. Controles compuestos
4. Renderers
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
SERVICIOS PERSONALIZADOSDependencyService
Podemos utilizar DependencyService para utilizar servicios específicos
de cada plataforma
Definiremos una interfaz del
servicio y luego realizaremos
implementaciones del mismo
por plataforma
ICallService
MakeCall(string
Phone)
Facilitamos una implementación
por cada plataforma
CallService
CallService
CallService
OpenUrl
Intent Uri
PhoneCallTask
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO SERVICIOS
Pasos a seguir
1º Paso – Crear la definición en el proyecto Shared/PCL
public interface ICallService
{
void MakeCall(string phone);
}
Contrato a implementar en cada
plataforma
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO SERVICIOS
Pasos a seguir
2º Paso – Implementación de la interfaz en cada
plataforma
class CallService : ICallService
{
public static void Init() { }
public void MakeCall(string phone)
{
var phoneCallTask = new PhoneCallTask { PhoneNumber = phone };
phoneCallTask.Show();
}
}
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO SERVICIOS
Pasos a seguir
3º Paso – Registro de la implementación de la
dependencia en cada plataforma
[assembly: Dependency(typeof(CallService))]
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO SERVICIOS
Pasos a seguir
4º Paso – Utilizar la dependencia en cualquier parte
necesaria (Shared/PCL o en código específico de la
paltaforma)
ICallService callService = DependencyService.Get<ICallService>();
callService.MakeCall(“612345678”);
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
DEMO
Creando servicios específicos por plataforma
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
MARKUP EXTENSIONS
Extensiones de marcado en XAML
Las extensiones de marcado nos permiten crear valores calculados
en run-time directamente desde XAML
<Label Text=“Name” />
<Entry Text=“{Binding Name}”/>
<Label Text=“Email” />
<Entry Text=“{Binding Email}”/>
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
MARKUP EXTENSIONS
Localizando la App utilizando extensiones de marcado
Las extensiones de marcado nos permiten crear valores calculados
en run-time directamente desde XAML
<Label Text=“{custom:Translate Name}” />
<Entry Text=“{Binding Name}”/>
<Label Text=“{custom:Translate Email}” />
<Entry Text=“{Binding Email}”/>
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
MARKUP EXTENSIONS
IMarkupExtension
Las extensiones de marcado nos permiten crear valores calculados
en run-time directamente desde XAML
class TranslateExtension : IMarkupExtension
{
…
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Text == null)
return string.Empty;
var temp = new ResourceManager(ResourceId
, typeof(TranslateExtension).GetTypeInfo().Assembly);
var translation = temp.GetString(Text, _ci) ?? Text;
return translation;
}
}
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
DEMO
Creando extensiones de marcado XAML
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO ABSTRACCIONES
¿Abstracciones?
Xamarin.Forms utiliza
abstracciones para definir los
elementos. Posteriormente se
transforma cada abstracción
ofreciendo una implementación y
mecanismos en cada plataforma.
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO ABSTRACCIONES
Layouts disponibles
Stack Absolute Relative Grid ContentView ScrollView Frame
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO ABSTRACCIONES
Controles disponibles
ActivityIndicator BoxView Button DatePicker Editor
Entry Image Label ListView Map
OpenGLView Picker ProgressBar SearchBar Slider
Stepper TableView TimePicker WebView EntryCell
ImageCell SwitchCell TextCell ViewCell
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
EXTENDIENDO UN CONTROL EN UNA
PLATAFORMA
Personalizando la forma en la que renderizamos un control
Si no nos gusta como se renderiza un control en una plataforma,
podemos cambiarlo
Element describe la apariencia
del control
Button
Text
TextColor
…
Renderer crea una visualización
específica para cada plataforma
ButtonRenderer
ButtonRenderer
ButtonRenderer
UIButton
Button
Button
MyButtonRenderer
UIImage
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERS
Pasos a seguir
Siempre tendremos DOS PARTES: El Elemento y el Renderer
Element describe la apariencia
del control
Button
Text
TextColor
…
Renderer crea una visualización
específica para cada plataforma
ButtonRenderer
ButtonRenderer
ButtonRenderer
Button
Button
MyButtonRenderer UIImage
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
¿CUÁNDO NECESITAMOS UN CUSTOM
RENDERER?Tenemos dos situaciones típicas
Controles personales
Calendar
Accordion
Chart
Rendering personalizado
Decoraciones de texto
Bordes
Sombras
Elementos específicos de la
plataforma
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERSPasos a seguir
1º Paso – Crear la definición en el proyecto Shared/PCL
public class RoundedBoxView : BoxView
{
} BoxView es una vista existente
que estamos extendiendo.
Podríamos utilizer View y crear
una totalmente nueva.
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERSPasos a seguir
2º Paso – Añadir propiedades a nuestra definición
public static readonly BindableProperty CornerRadiusProperty =
BindableProperty.Create<RoundedBoxView, double>(p => p.CornerRadius,
0);
public double CornerRadius
{
get { return (double)base.GetValue(CornerRadiusProperty); }
set { base.SetValue(CornerRadiusProperty, value); }
}
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERSPasos a seguir
3º Paso – Implementar un renderer por cada plataforma
public class RoundedBoxViewRenderer : ViewRenderer<RoundedBoxView,
UIView>
{
}
Define el control que estamos
renderizando
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERSPasos a seguir
3º Paso – Implementar un renderer por cada plataforma
protected override void OnElementChanged(ElementChangedEventArgs<RoundedBoxView>
e)
{
base.OnElementChanged(e);
var rbv = e.NewElement;
if (rbv != null)
{
var shadowView = new UIView();
_childView = new UIView();
…
SetNativeControl(shadowView);
}
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERSPasos a seguir
4º Paso – Registro de librería por plataforma
[assembly: ExportRendererAttribute(typeof(RoundedBoxView),
typeof(RoundedBoxViewRenderer))]
Nuestro custom render
Elemento Xamarin.Forms
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVOS CONTROLES &
RENDERERSPasos a seguir
5º Paso – Utilizar el nuevo Control.
xmlns:custom="clr-
namespace:dotnetspain2015.CustomControls;assembly=dotnetspain2015“
<custom:RoundedBoxView x:Name="rbv" WidthRequest="200"
HeightRequest="200“ Stroke="Yellow" StrokeThickness="2"
CornerRadius="20“ Color="Red" />
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
DEMO
Creando y extendiendo controles!
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CREANDO NUEVAS PÁGINAS
Páginas disponibles
También podemos personalizar o crear nuevas páginas.
Content MasterDetail Navigation Tabbed Carousel
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
DEMO
Creando nuevas páginas
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
CONCLUSIONES RÁPIDAS
1. Podemos extender XAML con nuestros
propias extensiones de marcado.
2. Tenemos acceso a APIs nativas de cada
plataforma.
3. Podemos extender y crear nuevos
controles y páginas.
4. Podemos utilizar Custom Renders para
utilizar controles nativos de cada
plataforma.
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
¿PREGUNTAS y RESPUESTAS?
Dudas?
P&R
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
ENLACE AL MATERIAL
Slides y ejemplos
https://github.com/jsuarezruiz/Events/tree/
master/DotNetSpain2015
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
GRACIAS a TODOS
Por vuestro tiempo!
Javier Suárez
Microsoft MVP Windows Platform Development
• Blog: http://geeks.ms/blogs/jsuarez
• Email: javiersuarezruiz@hotmail.com
• Twitter: @jsuarezruiz
SPAIN DOTNET COFERENCE
JAVIER SUÁREZ RUIZ
.
.
EXTENDIENDO
XAMARIN.FORMSServicios de cada plataforma, controles personalizados por plataforma, nuevos controles, nuevas páginas y mucho más!

Más contenido relacionado

La actualidad más candente

Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
Crear Apps Multiplataforma compartiendo la mayor cantidad con XamarinCrear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
Crear Apps Multiplataforma compartiendo la mayor cantidad con XamarinJavier Suárez Ruiz
 
Visual Studio 2017 Launch Event Sevilla
Visual Studio 2017 Launch Event SevillaVisual Studio 2017 Launch Event Sevilla
Visual Studio 2017 Launch Event SevillaJavier Suárez Ruiz
 
Codemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
Codemotion 2015: UI Tests, Test Cloud y CI con Apps XamarinCodemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
Codemotion 2015: UI Tests, Test Cloud y CI con Apps XamarinJavier Suárez Ruiz
 
Integración Continua con Apps Xamarin
Integración Continua con Apps XamarinIntegración Continua con Apps Xamarin
Integración Continua con Apps XamarinJavier Suárez Ruiz
 
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...Javier Suárez Ruiz
 
Codemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller XamarinCodemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller XamarinJavier Suárez Ruiz
 
Desarrollo para Microsoft Band con Xamarin
Desarrollo para Microsoft Band con XamarinDesarrollo para Microsoft Band con Xamarin
Desarrollo para Microsoft Band con XamarinJavier Suárez Ruiz
 
Introducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossIntroducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossJavier Suárez Ruiz
 
Universal Windows Platform Bridges
Universal Windows Platform BridgesUniversal Windows Platform Bridges
Universal Windows Platform BridgesJavier Suárez Ruiz
 
[dotNetSpain2016] Aumentando nuestra productividad en Xamarin
[dotNetSpain2016] Aumentando nuestra productividad en Xamarin[dotNetSpain2016] Aumentando nuestra productividad en Xamarin
[dotNetSpain2016] Aumentando nuestra productividad en XamarinJavier Suárez Ruiz
 
Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017Javier Suárez Ruiz
 
Aumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinAumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinJavier Suárez Ruiz
 

La actualidad más candente (20)

Testing de Apps Xamarin
Testing de Apps XamarinTesting de Apps Xamarin
Testing de Apps Xamarin
 
Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
Crear Apps Multiplataforma compartiendo la mayor cantidad con XamarinCrear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
 
Visual Studio 2017 Launch Event Sevilla
Visual Studio 2017 Launch Event SevillaVisual Studio 2017 Launch Event Sevilla
Visual Studio 2017 Launch Event Sevilla
 
Servicios Xamarin
Servicios XamarinServicios Xamarin
Servicios Xamarin
 
Codemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
Codemotion 2015: UI Tests, Test Cloud y CI con Apps XamarinCodemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
Codemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
 
Integración Continua con Apps Xamarin
Integración Continua con Apps XamarinIntegración Continua con Apps Xamarin
Integración Continua con Apps Xamarin
 
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
 
Codemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller XamarinCodemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller Xamarin
 
Desarrollo para Microsoft Band con Xamarin
Desarrollo para Microsoft Band con XamarinDesarrollo para Microsoft Band con Xamarin
Desarrollo para Microsoft Band con Xamarin
 
Introducción a Xamarin.Forms
Introducción a Xamarin.FormsIntroducción a Xamarin.Forms
Introducción a Xamarin.Forms
 
Introducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossIntroducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCross
 
Introduction to xamarin
Introduction to xamarinIntroduction to xamarin
Introduction to xamarin
 
Introducción a Xamarin
Introducción a XamarinIntroducción a Xamarin
Introducción a Xamarin
 
Desktop App Converter
Desktop App ConverterDesktop App Converter
Desktop App Converter
 
Xamarin forms Xaml + C#
Xamarin forms Xaml + C#Xamarin forms Xaml + C#
Xamarin forms Xaml + C#
 
Universal Windows Platform Bridges
Universal Windows Platform BridgesUniversal Windows Platform Bridges
Universal Windows Platform Bridges
 
Xamarin forms en el mundo real
Xamarin forms en el mundo realXamarin forms en el mundo real
Xamarin forms en el mundo real
 
[dotNetSpain2016] Aumentando nuestra productividad en Xamarin
[dotNetSpain2016] Aumentando nuestra productividad en Xamarin[dotNetSpain2016] Aumentando nuestra productividad en Xamarin
[dotNetSpain2016] Aumentando nuestra productividad en Xamarin
 
Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017
 
Aumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinAumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas Xamarin
 

Destacado

Xamarin University Sprint Fling 2016
Xamarin University Sprint Fling 2016Xamarin University Sprint Fling 2016
Xamarin University Sprint Fling 2016Javier Suárez Ruiz
 
Interfaces nativas Cross-Platform con Xamarin.Forms
Interfaces nativas Cross-Platform con Xamarin.FormsInterfaces nativas Cross-Platform con Xamarin.Forms
Interfaces nativas Cross-Platform con Xamarin.FormsJavier Suárez Ruiz
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSJavier Suárez Ruiz
 
Desarrollo de aplicaciones Windows Phone con Silverlight 8.1
Desarrollo de aplicaciones Windows Phone con Silverlight 8.1Desarrollo de aplicaciones Windows Phone con Silverlight 8.1
Desarrollo de aplicaciones Windows Phone con Silverlight 8.1Javier Suárez Ruiz
 
Introducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLIntroducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLSorey García
 
SVQDC - Desarrollo de Apps apra Hololens
SVQDC - Desarrollo de Apps apra HololensSVQDC - Desarrollo de Apps apra Hololens
SVQDC - Desarrollo de Apps apra HololensJavier Suárez Ruiz
 
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.FormsIntroducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.FormsJavier Suárez Ruiz
 
Creando aplicaciones windows phone
Creando aplicaciones windows phoneCreando aplicaciones windows phone
Creando aplicaciones windows phoneJavier Suárez Ruiz
 
Desenvolvimento Cross-mobile com Xamarin
Desenvolvimento Cross-mobile com XamarinDesenvolvimento Cross-mobile com Xamarin
Desenvolvimento Cross-mobile com Xamarinakamud
 
Introducción a las Aplicaciones Universales
Introducción a las Aplicaciones UniversalesIntroducción a las Aplicaciones Universales
Introducción a las Aplicaciones UniversalesJavier Suárez Ruiz
 
Integrando nuestra Aplicación Windows Phone con Cortana
Integrando nuestra Aplicación Windows Phone con CortanaIntegrando nuestra Aplicación Windows Phone con Cortana
Integrando nuestra Aplicación Windows Phone con CortanaJavier Suárez Ruiz
 
Introducción a las Apps Universales
Introducción a las Apps UniversalesIntroducción a las Apps Universales
Introducción a las Apps UniversalesJavier Suárez Ruiz
 
Publicación de Apps Universales
Publicación de Apps UniversalesPublicación de Apps Universales
Publicación de Apps UniversalesJavier Suárez Ruiz
 
Intro to xamarin forms: converters, animations, behaviors and triggers
Intro to xamarin forms: converters, animations, behaviors and triggersIntro to xamarin forms: converters, animations, behaviors and triggers
Intro to xamarin forms: converters, animations, behaviors and triggersJosué Yeray Julián Ferreiro
 

Destacado (20)

Xamarin University Sprint Fling 2016
Xamarin University Sprint Fling 2016Xamarin University Sprint Fling 2016
Xamarin University Sprint Fling 2016
 
Interfaces nativas Cross-Platform con Xamarin.Forms
Interfaces nativas Cross-Platform con Xamarin.FormsInterfaces nativas Cross-Platform con Xamarin.Forms
Interfaces nativas Cross-Platform con Xamarin.Forms
 
Extendiendo Xamarin.Forms
Extendiendo Xamarin.FormsExtendiendo Xamarin.Forms
Extendiendo Xamarin.Forms
 
Xamarin REvolve 2016
Xamarin REvolve 2016Xamarin REvolve 2016
Xamarin REvolve 2016
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOS
 
dotNetMálaga - Taller Xamarin
dotNetMálaga - Taller XamarindotNetMálaga - Taller Xamarin
dotNetMálaga - Taller Xamarin
 
Desarrollo de aplicaciones Windows Phone con Silverlight 8.1
Desarrollo de aplicaciones Windows Phone con Silverlight 8.1Desarrollo de aplicaciones Windows Phone con Silverlight 8.1
Desarrollo de aplicaciones Windows Phone con Silverlight 8.1
 
Introducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLIntroducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAML
 
SVQDC - Desarrollo de Apps apra Hololens
SVQDC - Desarrollo de Apps apra HololensSVQDC - Desarrollo de Apps apra Hololens
SVQDC - Desarrollo de Apps apra Hololens
 
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.FormsIntroducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
 
Taller Xamarin.Forms TLP Innova
Taller Xamarin.Forms TLP InnovaTaller Xamarin.Forms TLP Innova
Taller Xamarin.Forms TLP Innova
 
Creando aplicaciones windows phone
Creando aplicaciones windows phoneCreando aplicaciones windows phone
Creando aplicaciones windows phone
 
Desenvolvimento Cross-mobile com Xamarin
Desenvolvimento Cross-mobile com XamarinDesenvolvimento Cross-mobile com Xamarin
Desenvolvimento Cross-mobile com Xamarin
 
Bailando con monos - Introducción a Xamarin
Bailando con monos - Introducción a XamarinBailando con monos - Introducción a Xamarin
Bailando con monos - Introducción a Xamarin
 
Xamarin Forms - Dev In University
Xamarin Forms - Dev In UniversityXamarin Forms - Dev In University
Xamarin Forms - Dev In University
 
Introducción a las Aplicaciones Universales
Introducción a las Aplicaciones UniversalesIntroducción a las Aplicaciones Universales
Introducción a las Aplicaciones Universales
 
Integrando nuestra Aplicación Windows Phone con Cortana
Integrando nuestra Aplicación Windows Phone con CortanaIntegrando nuestra Aplicación Windows Phone con Cortana
Integrando nuestra Aplicación Windows Phone con Cortana
 
Introducción a las Apps Universales
Introducción a las Apps UniversalesIntroducción a las Apps Universales
Introducción a las Apps Universales
 
Publicación de Apps Universales
Publicación de Apps UniversalesPublicación de Apps Universales
Publicación de Apps Universales
 
Intro to xamarin forms: converters, animations, behaviors and triggers
Intro to xamarin forms: converters, animations, behaviors and triggersIntro to xamarin forms: converters, animations, behaviors and triggers
Intro to xamarin forms: converters, animations, behaviors and triggers
 

Similar a Extendiendo Xamarin.Forms con Custom Renders

Creando controles para Xamarin.Forms
Creando controles para Xamarin.FormsCreando controles para Xamarin.Forms
Creando controles para Xamarin.FormsJavier Suárez Ruiz
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
Topicos Selectos de Xamarin
Topicos Selectos de XamarinTopicos Selectos de Xamarin
Topicos Selectos de XamarinLuis Beltran
 
Analizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.FormsAnalizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.FormsJavier Suárez Ruiz
 
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)Software Guru
 
DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!Javier Suárez Ruiz
 
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
Plain Concepts Tech Day:  Desarrollo de aplicaciones multiplataforma con XamarinPlain Concepts Tech Day:  Desarrollo de aplicaciones multiplataforma con Xamarin
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con XamarinJavier Suárez Ruiz
 
De escritorio a Javascript, nuestra experiencia desde las trincheras
De escritorio a Javascript, nuestra experiencia desde las trincherasDe escritorio a Javascript, nuestra experiencia desde las trincheras
De escritorio a Javascript, nuestra experiencia desde las trincherasRoberto Luis Bisbé
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"www.encamina.com
 
Programación web con PHP con Tecnología Bootstrap.
Programación web con PHP con Tecnología Bootstrap.Programación web con PHP con Tecnología Bootstrap.
Programación web con PHP con Tecnología Bootstrap.Jose Fernandez
 
Bots más humanos con Alexa
Bots más humanos con AlexaBots más humanos con Alexa
Bots más humanos con AlexaLennin Cenas
 
Analitics: Monitoriza tus aplicaciones móviles
Analitics: Monitoriza tus aplicaciones móvilesAnalitics: Monitoriza tus aplicaciones móviles
Analitics: Monitoriza tus aplicaciones móvilesPlain Concepts
 

Similar a Extendiendo Xamarin.Forms con Custom Renders (20)

Custom Renders Xamarin.Forms
Custom Renders Xamarin.FormsCustom Renders Xamarin.Forms
Custom Renders Xamarin.Forms
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Creando controles para Xamarin.Forms
Creando controles para Xamarin.FormsCreando controles para Xamarin.Forms
Creando controles para Xamarin.Forms
 
Custom Renderers Made Simple
Custom Renderers Made SimpleCustom Renderers Made Simple
Custom Renderers Made Simple
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Topicos Selectos de Xamarin
Topicos Selectos de XamarinTopicos Selectos de Xamarin
Topicos Selectos de Xamarin
 
Analizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.FormsAnalizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.Forms
 
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
 
DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!
 
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
Plain Concepts Tech Day:  Desarrollo de aplicaciones multiplataforma con XamarinPlain Concepts Tech Day:  Desarrollo de aplicaciones multiplataforma con Xamarin
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
 
De escritorio a Javascript, nuestra experiencia desde las trincheras
De escritorio a Javascript, nuestra experiencia desde las trincherasDe escritorio a Javascript, nuestra experiencia desde las trincheras
De escritorio a Javascript, nuestra experiencia desde las trincheras
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
 
Xamarin Forms y MVVM
Xamarin Forms y MVVMXamarin Forms y MVVM
Xamarin Forms y MVVM
 
Salesforce Bilbao Elevate '15 - 4th developer workshop
Salesforce Bilbao Elevate '15 - 4th developer workshopSalesforce Bilbao Elevate '15 - 4th developer workshop
Salesforce Bilbao Elevate '15 - 4th developer workshop
 
2018.sps madrid.spfx workshop
2018.sps madrid.spfx workshop2018.sps madrid.spfx workshop
2018.sps madrid.spfx workshop
 
Programación web con PHP con Tecnología Bootstrap.
Programación web con PHP con Tecnología Bootstrap.Programación web con PHP con Tecnología Bootstrap.
Programación web con PHP con Tecnología Bootstrap.
 
Bots más humanos con Alexa
Bots más humanos con AlexaBots más humanos con Alexa
Bots más humanos con Alexa
 
Analitics: Monitoriza tus aplicaciones móviles
Analitics: Monitoriza tus aplicaciones móvilesAnalitics: Monitoriza tus aplicaciones móviles
Analitics: Monitoriza tus aplicaciones móviles
 
Servicios web
Servicios webServicios web
Servicios web
 

Más de Javier Suárez Ruiz

Cape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitCape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitJavier Suárez Ruiz
 
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.FormsTech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.FormsJavier Suárez Ruiz
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Javier Suárez Ruiz
 
Monkey Conf 2020: .NET MAUI Handlers
Monkey Conf 2020: .NET MAUI HandlersMonkey Conf 2020: .NET MAUI Handlers
Monkey Conf 2020: .NET MAUI HandlersJavier Suárez Ruiz
 
Monkey Conf 2019: Presente y futuro de Xamarin.Forms
Monkey Conf 2019: Presente y futuro de Xamarin.FormsMonkey Conf 2019: Presente y futuro de Xamarin.Forms
Monkey Conf 2019: Presente y futuro de Xamarin.FormsJavier Suárez Ruiz
 
Crear interfaces de usuario atractivas con Xamarin.Forms
Crear interfaces de usuario atractivas con Xamarin.FormsCrear interfaces de usuario atractivas con Xamarin.Forms
Crear interfaces de usuario atractivas con Xamarin.FormsJavier Suárez Ruiz
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsJavier Suárez Ruiz
 
Monkey Conf 2018: Conociendo Xamarin.Forms Shell
Monkey Conf 2018: Conociendo Xamarin.Forms ShellMonkey Conf 2018: Conociendo Xamarin.Forms Shell
Monkey Conf 2018: Conociendo Xamarin.Forms ShellJavier Suárez Ruiz
 
OpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller XamarinOpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller XamarinJavier Suárez Ruiz
 
Desarrollo Xamarin, más allá del desarrollo
Desarrollo Xamarin, más allá del desarrolloDesarrollo Xamarin, más allá del desarrollo
Desarrollo Xamarin, más allá del desarrolloJavier Suárez Ruiz
 
SVQXDG - Introducción a Embeddinator-4000
SVQXDG - Introducción a Embeddinator-4000SVQXDG - Introducción a Embeddinator-4000
SVQXDG - Introducción a Embeddinator-4000Javier Suárez Ruiz
 
dotNetMálaga 2017 - Taller Hololens con Wave Engine
dotNetMálaga 2017 - Taller Hololens con Wave EnginedotNetMálaga 2017 - Taller Hololens con Wave Engine
dotNetMálaga 2017 - Taller Hololens con Wave EngineJavier Suárez Ruiz
 
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.FormsdotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.FormsJavier Suárez Ruiz
 

Más de Javier Suárez Ruiz (20)

Cape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitCape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community Toolkit
 
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.FormsTech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
 
Monkey Conf 2020: .NET MAUI Handlers
Monkey Conf 2020: .NET MAUI HandlersMonkey Conf 2020: .NET MAUI Handlers
Monkey Conf 2020: .NET MAUI Handlers
 
Monkey Conf 2019: Presente y futuro de Xamarin.Forms
Monkey Conf 2019: Presente y futuro de Xamarin.FormsMonkey Conf 2019: Presente y futuro de Xamarin.Forms
Monkey Conf 2019: Presente y futuro de Xamarin.Forms
 
Crear interfaces de usuario atractivas con Xamarin.Forms
Crear interfaces de usuario atractivas con Xamarin.FormsCrear interfaces de usuario atractivas con Xamarin.Forms
Crear interfaces de usuario atractivas con Xamarin.Forms
 
#XamarinUIJuly Summary
#XamarinUIJuly Summary#XamarinUIJuly Summary
#XamarinUIJuly Summary
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.Forms
 
Taller Xamarin Monkey Conf 2018
Taller Xamarin Monkey Conf 2018Taller Xamarin Monkey Conf 2018
Taller Xamarin Monkey Conf 2018
 
Monkey Conf 2018: Conociendo Xamarin.Forms Shell
Monkey Conf 2018: Conociendo Xamarin.Forms ShellMonkey Conf 2018: Conociendo Xamarin.Forms Shell
Monkey Conf 2018: Conociendo Xamarin.Forms Shell
 
.Net Conf Sevilla 2018
.Net Conf Sevilla 2018.Net Conf Sevilla 2018
.Net Conf Sevilla 2018
 
OpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller XamarinOpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller Xamarin
 
Novedades Xamarin 3.0 Preview
Novedades Xamarin 3.0 PreviewNovedades Xamarin 3.0 Preview
Novedades Xamarin 3.0 Preview
 
Desarrollo Xamarin, más allá del desarrollo
Desarrollo Xamarin, más allá del desarrolloDesarrollo Xamarin, más allá del desarrollo
Desarrollo Xamarin, más allá del desarrollo
 
Introducción a Xamarin.Forms
Introducción a Xamarin.FormsIntroducción a Xamarin.Forms
Introducción a Xamarin.Forms
 
Introducción a Xamarin
Introducción a XamarinIntroducción a Xamarin
Introducción a Xamarin
 
SVQXDG - Introducción a Embeddinator-4000
SVQXDG - Introducción a Embeddinator-4000SVQXDG - Introducción a Embeddinator-4000
SVQXDG - Introducción a Embeddinator-4000
 
dotNetMálaga 2017 - Taller Hololens con Wave Engine
dotNetMálaga 2017 - Taller Hololens con Wave EnginedotNetMálaga 2017 - Taller Hololens con Wave Engine
dotNetMálaga 2017 - Taller Hololens con Wave Engine
 
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.FormsdotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
 
Embeddinator-4000
Embeddinator-4000Embeddinator-4000
Embeddinator-4000
 

Extendiendo Xamarin.Forms con Custom Renders

  • 1. EXTENDIENDO XAMARIN.FORMS Servicios de cada plataforma, controles personalizados por plataforma, nuevos controles, nuevas páginas y mucho más!
  • 2. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . Javier Suárez Microsoft MVP Windows Platform Development • Blog: http://geeks.ms/blogs/jsuarez • Email: javiersuarezruiz@hotmail.com • Twitter: @jsuarezruiz
  • 3. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . PREGUNTAS FRECUENTES ¿Puedo utilizar APIs específicas de una plataforma en concreto? ¿Puedo personalizar la apariencia o el comportamiento de un control existente? ¿Puedo utilizar controles nativos de cada plataforma con Xamarin.Forms? ¿Puedo personalizar la apariencia o el comportamiento de un tipo de página existente?
  • 4. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . ¿QUÉ VAMOS A VER? Un vistazo a la agenda Un vistazo rápido a Xamarin.Forms. Repasaremos que es, que beneficios aporta y en que consiste. Xamarin.Forms Veremos como utilizer APIs específicas de cada plataforma. Utilizaremos el patron MVVM junto a DI y Servicios. APIs específicas de la plataforma Crear nuevos controles, extender controles y páginas existentes además de utilizar controles nativos de cada plataforma. Custom Renders Preguntas traen respuestas y respuestas más preguntas. Al final de la sesión tendremos unos minutos para resolver todas las dudas que han surgido. Preguntas y Respuestas
  • 5. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . Extender Xamarin.Forms nos permitirá añadir funcionalidad, controles y páginas específicas para cada plataforma logrando que nuestras Apps se adapten a la perfección a las guías de estilo de cada plataforma.
  • 6. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . DESARROLLO CON XAMARIN El enfoque tradicional • La UI es específica de cada plataforma. • La lógica de la Aplicación es en C# y compartida mediante el uso de PCLs o proyectos Shared. • 70% aprox. De código compartido.
  • 7. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . XAMARIN y XAMARIN.FORMS Comparativa Con Xamarin.Forms: Se comparte más, controles compartidos El enfoque tradicional de Xamarin Shared UI Code
  • 8. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . XAMARIN.FORMS ¿Qué aporta? • Permite crear facilmente y con rapidez interfaces de usuario nativas compartidas • Los elementos de Xamarin.Forms son mapeados a elementos nativos y behaviors propios de cada plataforma • Podemos mezclar Xamarin.Forms con APIs nativas Shared UI Code
  • 9. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . RAZONES PARA EXTENDER XAMARIN.FORMSMotivos • Modificar aspectos de la UI. • Aprovechar a fondo las capacidades que nos ofrece cada plataforma. • Cubrir ciertas necesidades con nuevos controles o páginas.
  • 10. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . PUNTOS DE EXTENSIÓN DE XAMARIN.FORMS¿Qué podemos extender? 1. Servicos con DependencyService 2. Extensiones XAML: Markup Extensions 3. Controles compuestos 4. Renderers
  • 11. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . SERVICIOS PERSONALIZADOSDependencyService Podemos utilizar DependencyService para utilizar servicios específicos de cada plataforma Definiremos una interfaz del servicio y luego realizaremos implementaciones del mismo por plataforma ICallService MakeCall(string Phone) Facilitamos una implementación por cada plataforma CallService CallService CallService OpenUrl Intent Uri PhoneCallTask
  • 12. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO SERVICIOS Pasos a seguir 1º Paso – Crear la definición en el proyecto Shared/PCL public interface ICallService { void MakeCall(string phone); } Contrato a implementar en cada plataforma
  • 13. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO SERVICIOS Pasos a seguir 2º Paso – Implementación de la interfaz en cada plataforma class CallService : ICallService { public static void Init() { } public void MakeCall(string phone) { var phoneCallTask = new PhoneCallTask { PhoneNumber = phone }; phoneCallTask.Show(); } }
  • 14. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO SERVICIOS Pasos a seguir 3º Paso – Registro de la implementación de la dependencia en cada plataforma [assembly: Dependency(typeof(CallService))]
  • 15. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO SERVICIOS Pasos a seguir 4º Paso – Utilizar la dependencia en cualquier parte necesaria (Shared/PCL o en código específico de la paltaforma) ICallService callService = DependencyService.Get<ICallService>(); callService.MakeCall(“612345678”);
  • 16. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . DEMO Creando servicios específicos por plataforma
  • 17. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . MARKUP EXTENSIONS Extensiones de marcado en XAML Las extensiones de marcado nos permiten crear valores calculados en run-time directamente desde XAML <Label Text=“Name” /> <Entry Text=“{Binding Name}”/> <Label Text=“Email” /> <Entry Text=“{Binding Email}”/>
  • 18. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . MARKUP EXTENSIONS Localizando la App utilizando extensiones de marcado Las extensiones de marcado nos permiten crear valores calculados en run-time directamente desde XAML <Label Text=“{custom:Translate Name}” /> <Entry Text=“{Binding Name}”/> <Label Text=“{custom:Translate Email}” /> <Entry Text=“{Binding Email}”/>
  • 19. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . MARKUP EXTENSIONS IMarkupExtension Las extensiones de marcado nos permiten crear valores calculados en run-time directamente desde XAML class TranslateExtension : IMarkupExtension { … public object ProvideValue(IServiceProvider serviceProvider) { if (Text == null) return string.Empty; var temp = new ResourceManager(ResourceId , typeof(TranslateExtension).GetTypeInfo().Assembly); var translation = temp.GetString(Text, _ci) ?? Text; return translation; } }
  • 20. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . DEMO Creando extensiones de marcado XAML
  • 21. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO ABSTRACCIONES ¿Abstracciones? Xamarin.Forms utiliza abstracciones para definir los elementos. Posteriormente se transforma cada abstracción ofreciendo una implementación y mecanismos en cada plataforma.
  • 22. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO ABSTRACCIONES Layouts disponibles Stack Absolute Relative Grid ContentView ScrollView Frame
  • 23. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO ABSTRACCIONES Controles disponibles ActivityIndicator BoxView Button DatePicker Editor Entry Image Label ListView Map OpenGLView Picker ProgressBar SearchBar Slider Stepper TableView TimePicker WebView EntryCell ImageCell SwitchCell TextCell ViewCell
  • 24. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . EXTENDIENDO UN CONTROL EN UNA PLATAFORMA Personalizando la forma en la que renderizamos un control Si no nos gusta como se renderiza un control en una plataforma, podemos cambiarlo Element describe la apariencia del control Button Text TextColor … Renderer crea una visualización específica para cada plataforma ButtonRenderer ButtonRenderer ButtonRenderer UIButton Button Button MyButtonRenderer UIImage
  • 25. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERS Pasos a seguir Siempre tendremos DOS PARTES: El Elemento y el Renderer Element describe la apariencia del control Button Text TextColor … Renderer crea una visualización específica para cada plataforma ButtonRenderer ButtonRenderer ButtonRenderer Button Button MyButtonRenderer UIImage
  • 26. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . ¿CUÁNDO NECESITAMOS UN CUSTOM RENDERER?Tenemos dos situaciones típicas Controles personales Calendar Accordion Chart Rendering personalizado Decoraciones de texto Bordes Sombras Elementos específicos de la plataforma
  • 27. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERSPasos a seguir 1º Paso – Crear la definición en el proyecto Shared/PCL public class RoundedBoxView : BoxView { } BoxView es una vista existente que estamos extendiendo. Podríamos utilizer View y crear una totalmente nueva.
  • 28. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERSPasos a seguir 2º Paso – Añadir propiedades a nuestra definición public static readonly BindableProperty CornerRadiusProperty = BindableProperty.Create<RoundedBoxView, double>(p => p.CornerRadius, 0); public double CornerRadius { get { return (double)base.GetValue(CornerRadiusProperty); } set { base.SetValue(CornerRadiusProperty, value); } }
  • 29. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERSPasos a seguir 3º Paso – Implementar un renderer por cada plataforma public class RoundedBoxViewRenderer : ViewRenderer<RoundedBoxView, UIView> { } Define el control que estamos renderizando
  • 30. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERSPasos a seguir 3º Paso – Implementar un renderer por cada plataforma protected override void OnElementChanged(ElementChangedEventArgs<RoundedBoxView> e) { base.OnElementChanged(e); var rbv = e.NewElement; if (rbv != null) { var shadowView = new UIView(); _childView = new UIView(); … SetNativeControl(shadowView); }
  • 31. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERSPasos a seguir 4º Paso – Registro de librería por plataforma [assembly: ExportRendererAttribute(typeof(RoundedBoxView), typeof(RoundedBoxViewRenderer))] Nuestro custom render Elemento Xamarin.Forms
  • 32. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVOS CONTROLES & RENDERERSPasos a seguir 5º Paso – Utilizar el nuevo Control. xmlns:custom="clr- namespace:dotnetspain2015.CustomControls;assembly=dotnetspain2015“ <custom:RoundedBoxView x:Name="rbv" WidthRequest="200" HeightRequest="200“ Stroke="Yellow" StrokeThickness="2" CornerRadius="20“ Color="Red" />
  • 33. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . DEMO Creando y extendiendo controles!
  • 34. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CREANDO NUEVAS PÁGINAS Páginas disponibles También podemos personalizar o crear nuevas páginas. Content MasterDetail Navigation Tabbed Carousel
  • 35. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . DEMO Creando nuevas páginas
  • 36. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . CONCLUSIONES RÁPIDAS 1. Podemos extender XAML con nuestros propias extensiones de marcado. 2. Tenemos acceso a APIs nativas de cada plataforma. 3. Podemos extender y crear nuevos controles y páginas. 4. Podemos utilizar Custom Renders para utilizar controles nativos de cada plataforma.
  • 37. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . ¿PREGUNTAS y RESPUESTAS? Dudas? P&R
  • 38. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . ENLACE AL MATERIAL Slides y ejemplos https://github.com/jsuarezruiz/Events/tree/ master/DotNetSpain2015
  • 39. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . GRACIAS a TODOS Por vuestro tiempo! Javier Suárez Microsoft MVP Windows Platform Development • Blog: http://geeks.ms/blogs/jsuarez • Email: javiersuarezruiz@hotmail.com • Twitter: @jsuarezruiz
  • 40. SPAIN DOTNET COFERENCE JAVIER SUÁREZ RUIZ . . EXTENDIENDO XAMARIN.FORMSServicios de cada plataforma, controles personalizados por plataforma, nuevos controles, nuevas páginas y mucho más!