SlideShare una empresa de Scribd logo
1 de 45
Extendiendo
Xamarin.Forms
Servicios, Custom Renders y mucho más!
Javier Suárez Ruiz
Agenda
1. Extender Xamarin.Forms
2. MVVM
3. Creando servicios
4. Markup extensions
5. Custom Renders
6. Behaviors y efectos
7. Native Embedding
8. Preguntas
Preguntas muy 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?
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.
Extender Xamarin.Forms
Desarrollo con Xamarin
• 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.
Xamarin y Xamarin.Forms
Con Xamarin.Forms:
Se comparte más, controles compartidos
El enfoque tradicional de Xamarin
Shared UI Code
Xamarin.Forms
• 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
Razones para extender Xamarin.Forms
• Modificar aspectos de
la UI.
• Aprovechar a fondo
las capacidades que
nos ofrece cada
plataforma.
• Cubrir ciertas
necesidades con
nuevos controles o
páginas.
Puntos de extensión
1. Servicos con
DependencyService
2. Extensiones XAML:
Markup Extensions
3. Controles compuestos
4. Renderers
MVVM
Puntos de extensión
View
ViewModel
Model
get/set
Propiedades
Comandos
Notifica cambios
C#
Models
View
View
ViewModel
ViewModel
Model
Model
Cross Platform
DEMODEMODEMO
Aplicando el patron MVVM
en Xamarin.Forms
Creando servicios
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
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
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();
}
}
CREANDO SERVICIOS
Pasos a seguir
3º Paso – Registro de la implementación de la
dependencia en cada plataforma
[assembly: Dependency(typeof(CallService))]
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”);
DEMODEMODEMO
Creando servicios
Markup Extensions
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}”/>
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}”/>
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;
}
}
DEMODEMODEMO
Utilizando Markup
Extensions
Custom Renders
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.
CREANDO ABSTRACCIONES
Layouts disponibles
Stack Absolute Relative Grid ContentView ScrollView Frame
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
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
CREANDO NUEVOS CONTROLES & RENDERERSPasos 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
¿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
CREANDO NUEVOS CONTROLES & RENDERERS
Pasos 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.
CREANDO NUEVOS CONTROLES & RENDERERS
Pasos 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); }
}
CREANDO NUEVOS CONTROLES & RENDERERS
Pasos a seguir
3º Paso – Implementar un renderer por cada plataforma
public class RoundedBoxViewRenderer : ViewRenderer<RoundedBoxView,
UIView>
{
}
Define el control que estamos
renderizando
CREANDO NUEVOS CONTROLES & RENDERERS
Pasos 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);
}
CREANDO NUEVOS CONTROLES & RENDERERS
Pasos a seguir
4º Paso – Registro de librería por plataforma
[assembly: ExportRendererAttribute(typeof(RoundedBoxView),
typeof(RoundedBoxViewRenderer))]
Nuestro custom render
Elemento Xamarin.Forms
CREANDO NUEVOS CONTROLES & RENDERERS
Pasos 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" />
DEMODEMODEMO
Editar controles, crear
nuevos controles
Native Embedding
NATIVE EMBEDDING
Añadiendo controles específico de plataforma
• Xamarin.Forms 2.2+
pemite añadir controles
nativos específicos de
plataforma.
• Añadir a elementos con
propiedad Content o
Children.
• Métodos extension: Add o
ToView.
NATIVE EMBEDDING
Añadiendo controles específico de plataforma
#if __ANDROID__
using Android.Widget;
using Android.Views;
using Xamarin.Forms.Platform.Android;
#endif
#if __ANDROID__
var button = new Android.Widget.Button
(Forms.Context) { Text = "Native Android
Button" };
panel.Children.Add (button);
#endif
DEMODEMODEMO
Añadir controles nativos
directamente
Preguntas y respuestas.
¿Dudas?
&
Extendiendo
Xamarin.Forms
Javier Suárez Ruiz

Más contenido relacionado

La actualidad más candente

Xamarin Dev Days Málaga 2017 - Apps conectadas con Azure
Xamarin Dev Days Málaga 2017 - Apps conectadas con AzureXamarin Dev Days Málaga 2017 - Apps conectadas con Azure
Xamarin Dev Days Málaga 2017 - Apps conectadas con AzureJavier Suárez Ruiz
 
Xamarin Dev Days Madrid - Xamarin.Forms
Xamarin Dev Days Madrid - Xamarin.FormsXamarin Dev Days Madrid - Xamarin.Forms
Xamarin Dev Days Madrid - Xamarin.FormsJavier 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
 
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
 
Novedades Xamarin.Forms //BUILD 2017
Novedades Xamarin.Forms //BUILD 2017Novedades Xamarin.Forms //BUILD 2017
Novedades Xamarin.Forms //BUILD 2017Javier Suárez Ruiz
 
Adaptando Apps Xamarin.Forms a tabletas
Adaptando Apps Xamarin.Forms a tabletasAdaptando Apps Xamarin.Forms a tabletas
Adaptando Apps Xamarin.Forms a tabletasJavier Suárez Ruiz
 
Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...
Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...
Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...Javier Suárez Ruiz
 
Interfaces Adaptativas en Windows 10
Interfaces Adaptativas en Windows 10Interfaces Adaptativas en Windows 10
Interfaces Adaptativas en Windows 10Javier 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
 
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
 
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
 
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
 
DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!Javier Suárez Ruiz
 

La actualidad más candente (20)

Xamarin Dev Days Málaga 2017 - Apps conectadas con Azure
Xamarin Dev Days Málaga 2017 - Apps conectadas con AzureXamarin Dev Days Málaga 2017 - Apps conectadas con Azure
Xamarin Dev Days Málaga 2017 - Apps conectadas con Azure
 
Servicios Xamarin
Servicios XamarinServicios Xamarin
Servicios Xamarin
 
Xamarin Dev Days Madrid - Xamarin.Forms
Xamarin Dev Days Madrid - Xamarin.FormsXamarin Dev Days Madrid - Xamarin.Forms
Xamarin Dev Days Madrid - Xamarin.Forms
 
Desktop App Converter
Desktop App ConverterDesktop App Converter
Desktop App Converter
 
Novedades de Xamarin 4
Novedades de Xamarin 4Novedades de Xamarin 4
Novedades de Xamarin 4
 
Reconnect(); Sevilla - Keynote
Reconnect(); Sevilla - KeynoteReconnect(); Sevilla - Keynote
Reconnect(); Sevilla - Keynote
 
Integración Continua con Apps Xamarin
Integración Continua con Apps XamarinIntegración Continua con Apps Xamarin
Integración Continua con Apps Xamarin
 
Introducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossIntroducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCross
 
Novedades Xamarin.Forms //BUILD 2017
Novedades Xamarin.Forms //BUILD 2017Novedades Xamarin.Forms //BUILD 2017
Novedades Xamarin.Forms //BUILD 2017
 
Adaptando Apps Xamarin.Forms a tabletas
Adaptando Apps Xamarin.Forms a tabletasAdaptando Apps Xamarin.Forms a tabletas
Adaptando Apps Xamarin.Forms a tabletas
 
Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...
Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...
Crear Apps móviles multiplataforma con Xamarin compartiendo la mayor cantidad...
 
Introducción a Xamarin
Introducción a XamarinIntroducción a Xamarin
Introducción a Xamarin
 
Taller Xamarin Monkey Conf 2018
Taller Xamarin Monkey Conf 2018Taller Xamarin Monkey Conf 2018
Taller Xamarin Monkey Conf 2018
 
Interfaces Adaptativas en Windows 10
Interfaces Adaptativas en Windows 10Interfaces Adaptativas en Windows 10
Interfaces Adaptativas en Windows 10
 
Introducción a Xamarin.Forms
Introducción a Xamarin.FormsIntroducción a Xamarin.Forms
Introducción a Xamarin.Forms
 
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
 
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
 
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
 
Monkey Conf 2020: .NET MAUI Handlers
Monkey Conf 2020: .NET MAUI HandlersMonkey Conf 2020: .NET MAUI Handlers
Monkey Conf 2020: .NET MAUI Handlers
 
DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!DotNet2018: Xamarin.Forms Everywhere!
DotNet2018: Xamarin.Forms Everywhere!
 

Destacado

Xamarin Dev Days Madrid 2017 - Xamarin.Forms
Xamarin Dev Days Madrid 2017 -  Xamarin.FormsXamarin Dev Days Madrid 2017 -  Xamarin.Forms
Xamarin Dev Days Madrid 2017 - Xamarin.FormsJavier 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
 
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...Javier Suárez Ruiz
 
Windows 10: Hel10 World! - Novedades XAML
Windows 10: Hel10 World! - Novedades XAMLWindows 10: Hel10 World! - Novedades XAML
Windows 10: Hel10 World! - Novedades XAMLJavier Suárez Ruiz
 
Windows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces AdaptativasWindows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces AdaptativasJavier Suárez Ruiz
 
Regreso al futuro, la proposición indecente de Microsoft
Regreso al futuro, la proposición indecente de MicrosoftRegreso al futuro, la proposición indecente de Microsoft
Regreso al futuro, la proposición indecente de MicrosoftJavier Suárez Ruiz
 
Novedades en Visual Studio Online
Novedades en Visual Studio OnlineNovedades en Visual Studio Online
Novedades en Visual Studio OnlineJavier Suárez Ruiz
 
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
 
Introducción al desarrollo de Apps en Windows 10
Introducción al desarrollo de Apps en  Windows 10Introducción al desarrollo de Apps en  Windows 10
Introducción al desarrollo de Apps en Windows 10Javier Suárez Ruiz
 
[Evento WPSUG] Universal Windows Platform Bridges
[Evento WPSUG] Universal Windows Platform Bridges[Evento WPSUG] Universal Windows Platform Bridges
[Evento WPSUG] Universal Windows Platform BridgesJavier Suárez Ruiz
 
Windows 10: One SDK to rule them all
Windows 10: One SDK to rule them allWindows 10: One SDK to rule them all
Windows 10: One SDK to rule them allJavier Suárez Ruiz
 
Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4Javier Suárez Ruiz
 
Reconnect(); Sevilla - Universal Windows Platform
Reconnect(); Sevilla - Universal Windows PlatformReconnect(); Sevilla - Universal Windows Platform
Reconnect(); Sevilla - Universal Windows PlatformJavier Suárez Ruiz
 
Universal Windows Platform Bridges
Universal Windows Platform BridgesUniversal Windows Platform Bridges
Universal Windows Platform BridgesJavier Suárez Ruiz
 
Tus aplicaciones en pantalla grande con Xbox One
Tus aplicaciones en pantalla grande con Xbox One Tus aplicaciones en pantalla grande con Xbox One
Tus aplicaciones en pantalla grande con Xbox One Javier Suárez Ruiz
 
Creando Aplicaciones UWP para Xbox One
Creando Aplicaciones UWP para Xbox OneCreando Aplicaciones UWP para Xbox One
Creando Aplicaciones UWP para Xbox OneJavier Suárez Ruiz
 

Destacado (19)

Xamarin Dev Days Madrid 2017 - Xamarin.Forms
Xamarin Dev Days Madrid 2017 -  Xamarin.FormsXamarin Dev Days Madrid 2017 -  Xamarin.Forms
Xamarin Dev Days Madrid 2017 - Xamarin.Forms
 
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...
 
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
 
Windows 10: Hel10 World! - Novedades XAML
Windows 10: Hel10 World! - Novedades XAMLWindows 10: Hel10 World! - Novedades XAML
Windows 10: Hel10 World! - Novedades XAML
 
Windows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces AdaptativasWindows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces Adaptativas
 
Windows 10: Novedades en XAML
Windows 10: Novedades en XAMLWindows 10: Novedades en XAML
Windows 10: Novedades en XAML
 
Regreso al futuro, la proposición indecente de Microsoft
Regreso al futuro, la proposición indecente de MicrosoftRegreso al futuro, la proposición indecente de Microsoft
Regreso al futuro, la proposición indecente de Microsoft
 
Novedades en Visual Studio Online
Novedades en Visual Studio OnlineNovedades en Visual Studio Online
Novedades en Visual Studio Online
 
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
 
Introducción al desarrollo de Apps en Windows 10
Introducción al desarrollo de Apps en  Windows 10Introducción al desarrollo de Apps en  Windows 10
Introducción al desarrollo de Apps en Windows 10
 
[Evento WPSUG] Universal Windows Platform Bridges
[Evento WPSUG] Universal Windows Platform Bridges[Evento WPSUG] Universal Windows Platform Bridges
[Evento WPSUG] Universal Windows Platform Bridges
 
Windows 10: One SDK to rule them all
Windows 10: One SDK to rule them allWindows 10: One SDK to rule them all
Windows 10: One SDK to rule them all
 
Taller Windows 10 TLP Innova
Taller Windows 10 TLP InnovaTaller Windows 10 TLP Innova
Taller Windows 10 TLP Innova
 
Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4
 
Reconnect(); Sevilla - Universal Windows Platform
Reconnect(); Sevilla - Universal Windows PlatformReconnect(); Sevilla - Universal Windows Platform
Reconnect(); Sevilla - Universal Windows Platform
 
Universal Windows Platform Bridges
Universal Windows Platform BridgesUniversal Windows Platform Bridges
Universal Windows Platform Bridges
 
Novedades en XAML
Novedades en XAMLNovedades en XAML
Novedades en XAML
 
Tus aplicaciones en pantalla grande con Xbox One
Tus aplicaciones en pantalla grande con Xbox One Tus aplicaciones en pantalla grande con Xbox One
Tus aplicaciones en pantalla grande con Xbox One
 
Creando Aplicaciones UWP para Xbox One
Creando Aplicaciones UWP para Xbox OneCreando Aplicaciones UWP para Xbox One
Creando Aplicaciones UWP para Xbox One
 

Similar a Extendiendo Xamarin.Forms

Extendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersExtendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersJavier Suárez Ruiz
 
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
 
Creando controles para Xamarin.Forms
Creando controles para Xamarin.FormsCreando controles para Xamarin.Forms
Creando controles para Xamarin.FormsJavier Suárez Ruiz
 
Visual Studio2005
Visual Studio2005Visual Studio2005
Visual Studio2005hvillarreal
 
Introduccion a MVU con Comet
Introduccion a MVU con CometIntroduccion a MVU con Comet
Introduccion a MVU con CometLuis Beltran
 
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
 
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é
 
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...Luis Beltran
 
Ponencia conic 2009_darc
Ponencia conic 2009_darcPonencia conic 2009_darc
Ponencia conic 2009_darcJorge Rodriguez
 
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
 

Similar a Extendiendo Xamarin.Forms (20)

Extendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersExtendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom Renders
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Custom Renders Xamarin.Forms
Custom Renders Xamarin.FormsCustom Renders Xamarin.Forms
Custom Renders Xamarin.Forms
 
Topicos Selectos de Xamarin
Topicos Selectos de XamarinTopicos Selectos de Xamarin
Topicos Selectos de Xamarin
 
Custom Renderers Made Simple
Custom Renderers Made SimpleCustom Renderers Made Simple
Custom Renderers Made Simple
 
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
 
Creando controles para Xamarin.Forms
Creando controles para Xamarin.FormsCreando controles para Xamarin.Forms
Creando controles para Xamarin.Forms
 
Visual Studio2005
Visual Studio2005Visual Studio2005
Visual Studio2005
 
primera aplicacion Xamarin.pptx
primera aplicacion Xamarin.pptxprimera aplicacion Xamarin.pptx
primera aplicacion Xamarin.pptx
 
Symfony
SymfonySymfony
Symfony
 
Introduccion a MVU con Comet
Introduccion a MVU con CometIntroduccion a MVU con Comet
Introduccion a MVU con Comet
 
Visual Studio 2017 Launch Event Sevilla
Visual Studio 2017 Launch Event SevillaVisual Studio 2017 Launch Event Sevilla
Visual Studio 2017 Launch Event Sevilla
 
VERUSKA SALA
VERUSKA SALAVERUSKA SALA
VERUSKA SALA
 
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
 
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
 
Ponencia conic 2009_darc
Ponencia conic 2009_darcPonencia conic 2009_darc
Ponencia conic 2009_darc
 
Roxana
RoxanaRoxana
Roxana
 
Visualbasic6.0
Visualbasic6.0Visualbasic6.0
Visualbasic6.0
 
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
 
Introduction to xamarin
Introduction to xamarinIntroduction to xamarin
Introduction to xamarin
 

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
 
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
 
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
 
Aumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinAumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinJavier 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
 
Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017Javier Suárez Ruiz
 
Codemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller XamarinCodemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller XamarinJavier 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
 

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

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....
 
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
 
.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
 
Aumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinAumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas Xamarin
 
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
 
Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017Novedades Xamarin Connect(); 2017
Novedades Xamarin Connect(); 2017
 
Codemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller XamarinCodemotion 2017 - Taller Xamarin
Codemotion 2017 - Taller 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
 
Embeddinator-4000
Embeddinator-4000Embeddinator-4000
Embeddinator-4000
 

Extendiendo Xamarin.Forms

  • 1. Extendiendo Xamarin.Forms Servicios, Custom Renders y mucho más! Javier Suárez Ruiz
  • 2. Agenda 1. Extender Xamarin.Forms 2. MVVM 3. Creando servicios 4. Markup extensions 5. Custom Renders 6. Behaviors y efectos 7. Native Embedding 8. Preguntas
  • 3. Preguntas muy 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. 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. Desarrollo con Xamarin • 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. Xamarin y Xamarin.Forms Con Xamarin.Forms: Se comparte más, controles compartidos El enfoque tradicional de Xamarin Shared UI Code
  • 8. Xamarin.Forms • 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. Razones para extender Xamarin.Forms • 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. Puntos de extensión 1. Servicos con DependencyService 2. Extensiones XAML: Markup Extensions 3. Controles compuestos 4. Renderers
  • 11. MVVM
  • 12. Puntos de extensión View ViewModel Model get/set Propiedades Comandos Notifica cambios C# Models View View ViewModel ViewModel Model Model Cross Platform
  • 13. DEMODEMODEMO Aplicando el patron MVVM en Xamarin.Forms
  • 15. 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
  • 16. 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
  • 17. 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(); } }
  • 18. CREANDO SERVICIOS Pasos a seguir 3º Paso – Registro de la implementación de la dependencia en cada plataforma [assembly: Dependency(typeof(CallService))]
  • 19. 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”);
  • 22. 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}”/>
  • 23. 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}”/>
  • 24. 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; } }
  • 27. 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.
  • 28. CREANDO ABSTRACCIONES Layouts disponibles Stack Absolute Relative Grid ContentView ScrollView Frame
  • 29. 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
  • 30. 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
  • 31. CREANDO NUEVOS CONTROLES & RENDERERSPasos 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
  • 32. ¿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
  • 33. CREANDO NUEVOS CONTROLES & RENDERERS Pasos 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.
  • 34. CREANDO NUEVOS CONTROLES & RENDERERS Pasos 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); } }
  • 35. CREANDO NUEVOS CONTROLES & RENDERERS Pasos a seguir 3º Paso – Implementar un renderer por cada plataforma public class RoundedBoxViewRenderer : ViewRenderer<RoundedBoxView, UIView> { } Define el control que estamos renderizando
  • 36. CREANDO NUEVOS CONTROLES & RENDERERS Pasos 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); }
  • 37. CREANDO NUEVOS CONTROLES & RENDERERS Pasos a seguir 4º Paso – Registro de librería por plataforma [assembly: ExportRendererAttribute(typeof(RoundedBoxView), typeof(RoundedBoxViewRenderer))] Nuestro custom render Elemento Xamarin.Forms
  • 38. CREANDO NUEVOS CONTROLES & RENDERERS Pasos 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" />
  • 41. NATIVE EMBEDDING Añadiendo controles específico de plataforma • Xamarin.Forms 2.2+ pemite añadir controles nativos específicos de plataforma. • Añadir a elementos con propiedad Content o Children. • Métodos extension: Add o ToView.
  • 42. NATIVE EMBEDDING Añadiendo controles específico de plataforma #if __ANDROID__ using Android.Widget; using Android.Views; using Xamarin.Forms.Platform.Android; #endif #if __ANDROID__ var button = new Android.Widget.Button (Forms.Context) { Text = "Native Android Button" }; panel.Children.Add (button); #endif

Notas del editor

  1. https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/add-platform-controls/