XAML
XAML
devmasters.com.mx
Mdulo 2: XAML
El Lenguaje XAML
Qu es XAML?
Lenguaje de Marcado acrnimo de eXtensible Application Markup Language Expresa declarativamente las interfaces de usuario en aplicaciones Silverlight 5, WPF, WP7.x, WP8 y Aplicaciones Metro en Windows 8.x El objetivo de XAML es ser un lenguaje de instanciacin de objetos
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
http://schemas.microsoft.com/winfx/2006/xaml
Espacio de nombres del lenguaje XAML
http://schemas.microsoft.com/expression/blend/2008
Espacio de nombres para atributos en tiempo de diseo
devmasters.com.mx
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Sintaxis de Subelementos
Todas las propiedades se pueden establecer como subelementos Necesario nicamente cuando el valor de la propiedad es un objeto complejo y no se cuenta con un Convertidor de Tipo
<Rectangle Width="100" Height="100" Fill="Yellow" /> <Rectangle> <Rectangle.Width>100</Rectangle.Width> <Rectangle.Height>100</Rectangle.Height> <Rectangle.Fill>Yellow</Rectangle.Fill> </Rectangle>
devmasters.com.mx
Sintaxis de Contenido
Algunos tipos soportan la sintaxis de contenido
<Border> <Border.Child> <Ellipse /> </Border.Child> </Border>
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Extensiones de Marcado
Clases que permiten al intrprete de XAML el evaluar de manera diferente sus valores
{StaticResource} {Binding} {TemplateBinding} {RelativeSource} {x:Null}
Sintaxis:
<Elemento Propiedad={Extension [Propiedades]}
devmasters.com.mx
/>
Extensiones de Marcado
{StaticResource}
Referencia recursos de un diccionario
{Binding}
Expresa un enlace de datos
{TemplateBinding}
Permite enlazar el valor de una propiedad de una plantilla a un valor concreto de la clase que la implementa
{RelativeSource}
Expresa un enlace de datos ancestral relativo
{x:Null}
Permite asignar como valor un null
devmasters.com.mx
Recursos
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Recursos
Los recursos son una bolsa de propiedades La clase base FrameworkElement implementa la propiedad Resources
Permite guardar cualquier tipo de objeto para reutilizarlo Se identifican por medio de una clave nica (atributo x:Key)
<Grid.Resources> <SolidColorBrush x:Key="Brocha" Color="Red" /> </Grid.Resources>
devmasters.com.mx
Recursos
Se referencian en XAML por medio de la extensin {StaticResource} {StaticResource} puede ser usada en propiedades regulares CLR
<UserControl.Resources> <SolidColorBrush x:Key="Brocha" Color="Red" /> </UserControl.Resources> <Grid x:Name="LayoutRoot"> <Rectangle Width="100" Height="100" Fill="{StaticResource Brocha}" /> </Grid>
devmasters.com.mx
Recursos
Siempre se referenciar al recurso con nivel de visibilidad ms cercano
<UserControl.Resources> <SolidColorBrush x:Key="Brocha" Color="Red" /> </UserControl.Resources> <Grid x:Name="LayoutRoot"> <Grid.Resources> <SolidColorBrush x:Key="Brocha" Color="Blue" /> </Grid.Resources> <Rectangle Width="100" Height="100" Fill="{StaticResource Brocha}" /> </Grid>/
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Recursos
Recursos va cdigo
En cdigo usamos la propiedad Resources para leer o agregar objetos al diccionario de recursos La propiedad Resources es un diccionario de tipo <object,object>
private void Button_Click(object sender, RoutedEventArgs e) { if (this.Resources.Contains("brocha1")) { var brocha = this.Resources["brocha1"] as SolidColorBrush; } this.Resources.Add("numero", 3.1416); }
devmasters.com.mx
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Propiedades Adjuntas
Propiedades Adjuntas
Tipo especial de Propiedad Dependiente Notifican al elemento padre que se requiere cierto valor
Si se establece el valor de una propiedad de otro padre, se omitir
Sintaxis en XAML:
<Canvas> <ClasePadre> <ElementoCanvas.Left <Ellipse ClasePadre.Propiedad = "50" /> = "Valor" /> </ClasePadre> </Canvas>
devmasters.com.mx
Propiedades Adjuntas
Propiedades Adjuntas va cdigo
Puedes utilizar los mtodos SetValue() y GetValue() como en cualquier otra Propiedad Dependiente
if ((double)el1.GetValue(Canvas.LeftProperty) == 0) { el1.SetValue(Canvas.LeftProperty, 50); }
Puedes usar los mtodos especficamente pensados para leer o establecer los valores de las Propiedades Adjuntas
Evitan el boxing/unboxing
if (Canvas.GetLeft(el1) == 0) { Canvas.SetLeft(el1, 50); }
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Contenedores
Contenedores
Contenedores visuales Clases que heredan de la clase base Panel
Canvas StackPanel Grid
Otros
Border ScrollViewer
devmasters.com.mx
Canvas
Contenedor bsico de posicionamiento absoluto Propiedades adjuntas:
Left Top ZIndex
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
devmasters.com.mx
Canvas
Ejemplo
<Canvas Width="600" Height="600" Background="Black"> <Button Width="200" Height="80" Content="Botn" Canvas.Left="20" Canvas.Top="20" /> <Canvas Width="400" Height="400" Background="LightBlue" Canvas.Left="50" Canvas.Top="100"> <Button Width="200" Height="80" Content="Botn" Canvas.Left="20" Canvas.Top="20" /> </Canvas> </Canvas>
devmasters.com.mx
StackPanel
Contenedor para apilar elementos de manera horizontal o vertical til en escenarios donde necesites alinear controles
Ejemplo: una barra de botones, un men, etc.
devmasters.com.mx
StackPanel
Ejemplo:
<StackPanel Background="White" Background="White"> Orientation="Horizontal"> <Ellipse Width="200" <Ellipse Width="200" Height="200" Height="200" Fill="Lime" /> <Ellipse Width="200" Fill="Lime" /> <Ellipse Width="200" Height="200" Height="200" Fill="Orange" /> <Ellipse Width="200" Fill="Orange" /> <Ellipse Width="200" Height="200" Height="200" Fill="Red" /> </StackPanel> Fill="Red" /> </StackPanel>
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
10
devmasters.com.mx
Grid
Contenedor de tipo tabla El ms flexible de todos los contenedores
Predeterminado
Grid
Propiedades ColumnDefinitions y RowDefinitions
Permiten definir las columnas y filas para el Grid Inherentemente tiene una sola celda
<Grid Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> </Grid>
devmasters.com.mx
Grid
A travs de sus Propiedades Adjuntas se posicionan sus elementos hijos
<Grid Background="White"> ... <Ellipse Width="200" Height="200" Fill="Red" /> <Ellipse Width="200" Height="200" Fill="Blue" Grid.Row="1" Grid.Column="1" /> <Ellipse Width="200" Height="200" Fill="Lime" Grid.Row="1" Grid.Column="0" /> </Grid>
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
11
devmasters.com.mx
Grid
Los anchos y altos de las columnas y filas pueden ser de 3 tipos:
Fijo Automtico Proporcional (*)
Predeterminado
devmasters.com.mx
Grid
Tamao fijo
Valor absoluto expresado en pixeles Si el tamao de su contenido se desborda, se cortar
<Grid Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition Width="100" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Ellipse Width="200" Height="200" Fill="Red" /> </Grid>
devmasters.com.mx
Grid
Tamao automtico
Crece en funcin de su contenido Expresado con el valor Auto
<Grid Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition Width="100" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Ellipse Width="200" Height="200" Fill="Red" /> <Ellipse Width="300" Height="300" Fill="LightBlue" Grid.Column="1" /> </Grid>
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
12
devmasters.com.mx
Grid
Tamao proporcional
Factor de proporcin expresado con un nmero y * Es el tamao predeterminado (1*)
<Grid Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition Width="100" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <Ellipse Width="200" Height="200" Fill="Red" /> <Ellipse Width="300" Height="300" Fill="LightBlue" Grid.Column="1" /> <Ellipse Width="120" Height="120" Fill="Orange" Grid.Column="2" /> <Ellipse Width="120" Height="120" Fill="Black" Grid.Column="3" /> </Grid>
devmasters.com.mx
Border
System.Windows.Controls Dibuja un borde y/o un fondo alrededor de un objeto
<Border BorderThickness="10" BorderBrush="Blue" Background="Yellow" Width="200" Height="100" Padding="10"> <Button Content="Botn" /> </Border>
devmasters.com.mx
Propiedades de Distribucin
Propiedades de Distribucin dinmica para contenedores excepto el Canvas
HorizontalAlignment y VerticalAlignment Margin MaxWidth MaxHeight MinWidth MinHeight
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
13
devmasters.com.mx
Propiedades de Distribucin
HorizontalAlignment y VerticalAlignment
Por default su valor es Stretch
<Grid Background="White"> <Ellipse Fill="Red" /> </Grid>
devmasters.com.mx
Propiedades de Distribucin
Margin
Distancia que tiene el elemento con respecto a sus lados externos Puede ser expresado con un solo valor numrico para los cuatro lados o con la forma:
Izquierda-Arriba-Derecha-Abajo
<Ellipse Fill="Red" Margin="100 20 100 50" />
devmasters.com.mx
Formas bsicas
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
14
devmasters.com.mx
Clase Shape
System.Windows.Shapes Propiedades
Fill Stroke StrokeThickness StrokeDashCap StrokeDashOffSet
devmasters.com.mx
Formas Bsicas
System.Windows.Shapes
Ellipse Rectangle Line Polyline Polygon Path
devmasters.com.mx
Image
System.Windows.Controls Clase para representar una imagen Similar al elemento <img> de HTML Puede tener una fuente absoluta o relativa
<Image Source="WPLogo-small.png" />
<Image Source="http://www.microsoft.com/silverlight/fw/logoSilv erlight.jpg" />
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
15
devmasters.com.mx
TextBlock
System.Windows.Controls Elemento principal para mostrar texto en las aplicaciones XAML Soporta cambiar el tamao de la fuente, el tipo, las decoraciones, alineaciones, etc.
devmasters.com.mx
TextBlock
Run
Permite estilizar partes del texto de un TextBlock
LineBreak
Salto de lnea explcito
devmasters.com.mx
MediaElement
System.Windows.Controls Representa un objeto que contiene audio y/o video Soporta:
Video: WMV, H.264 Audio: AAC, MP3 y WMA
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
16
devmasters.com.mx
MediaElement
Propiedades
AutoPlay NaturalDuration Balance Volume CurrentState
Mtodos
Play() Stop() Pause()
Eventos
MediaOpened MediaEnded MediaFailed
devmasters.com.mx
Brochas
Brochas
SolidColorBrush LinearGradientBrush RadialGradientBrush ImageBrush VideoBrush
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
17
devmasters.com.mx
VideoBrush
Fuentes:
MediaElement CaptureSource
devmasters.com.mx
Transformaciones y Animaciones
Transformaciones
Modifican un elemento y sus hijos Se aplican en la propiedad UIElement.RenderTransform
ScaleTransform SkewTransform RotateTransform TranslateTransform CompositeTransform
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
18
devmasters.com.mx
Transformaciones
CompositeTransform
Permite aplicar fcilmente un conjunto de transformaciones en XAML o en cdigo
<Button Name="boton1"> <Button.RenderTransform> <CompositeTransform Rotation="45" ScaleX="0.5" ScaleY="0.3" /> </Button.RenderTransform> var ct = new CompositeTransform() { </Button> Rotation = 45, ScaleX = 0.5, ScaleY = 0.3 }; boton1.RenderTransform = ct; devmasters.com.mx
Demo: Transformaciones
Moviendo un elemento de manera tctil
Animaciones
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
19
devmasters.com.mx
Animaciones
Dos categoras principales
Animaciones de Lnea de Tiempo Animaciones por Recuadro
Se deben declarar dentro de un elemento Storyboard El Storyboard debe estar dentro de un Diccionario de Recursos
Tambin pueden ser construidos va cdigo
Animaciones
Animaciones de Lnea de Tiempo (interpoladas)
Se establece un valor de inicio y un valor final, y la interpolacin se har automticamente <Storyboard x:Name="sb1"> Tipos
DoubleAnimation ColorAnimation PointAnimation
sb1.Begin();
devmasters.com.mx
Animaciones
Animaciones por recuadro (keyframe)
Permiten definir qu valor deseamos en cierta parte de la lnea de tiempo Tipos
DoubleAnimationUsingKeyFrames ColorAnimationUsingKeyFrames PointAnimationUsingKeyFrames ObjectAnimationUsingKeyFrames
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
20
devmasters.com.mx
Animaciones
Interpolacin de valores
Linear Spline Discrete
devmasters.com.mx
Estilos
Estilos
System.Windows.Style Elementos que nos permiten cambiar un grupo de propiedades Similares a CSS
<Style x:Key="EstiloBotonBase" TargetType="Button"> <Setter Property="Width" Value="200" /> <Setter Property="Height" Value="80" /> <Setter Property="Foreground" Value="Yellow" /> </Style>
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
21
devmasters.com.mx
Estilos
Propiedad TargetType
Indica el tipo al cual el estilo puede aplicarse Es polimrfico (ejemplo: ButtonBase vs. Button)
<Style x:Key="EstiloBotonBase" TargetType="ButtonBase"> </Style> <Button Style="{StaticResource EstiloBotonBase}" /> <RadioButton Style="{StaticResource EstiloBotonBase}" /> <HyperlinkButton Style="{StaticResource EstiloBotonBase}" />
devmasters.com.mx
Estilos
Propiedad BasedOn
Permite crear estilos en cascada
<Style x:Key="EstiloBotonBase" TargetType="ButtonBase"> </Style> <Style x:Key="EstiloBoton" BasedOn="{StaticResource EstiloBotonBase}" TargetType="Button"> <Setter Property="Foreground" Value="Blue" /> <Setter Property="FontSize" Value="20" /> </Style>
devmasters.com.mx
Estilos
Estilos Implcitos
No utilizan x:Key Se basan en el TargetType
<Style TargetType="TextBlock"> <Setter Property="FontFamily" Value="Arial Black" /> <Setter Property="FontSize" Value="30" /> <Setter Property="Foreground" Value="White" /> </Style> <TextBlock>Estilo</TextBlock> <TextBlock>Implcito</TextBlock>
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
22
devmasters.com.mx
Estilos
Diccionarios Mezclados
Permiten compartir Estilos entre proyectos Los archivos XAML pueden estar en el XAP o en un ensamblado externo
Usa una ruta explcita en la propiedad Source. Ejemplo: /Ensamblado;component/TuDiccionario.xaml
<Application xmlns="..." xmlns:x="..." x:Class="MyApp.App"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="MiDiccionario.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
devmasters.com.mx
XAML Dinmico
XAML dinmico
Todo lo que declaras en XAML puede ser expresado va cdigo
XAML es un lenguaje de instanciacin de objetos A todo elemento de XAML le corresponde una clase en el API
Contras:
Pierdes el Blendability
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
23
devmasters.com.mx
XAML dinmico
<Canvas Background="Black" Width="300" Height="300"> <Button Width="200" Height="100" Content="Nuevo botn" Canvas.Left="100" Canvas.Top="100" /> </Canvas>
this.Loaded += (s, a) => { var canvas = new Canvas() { Width = 300, Height = 300, Background = new SolidColorBrush(Colors.Black) }; var button = new Button() { Width = 200, Height = 100, Content = "Nuevo Botn" }; canvas.Children.Add(button); Canvas.SetLeft(button, 100); Canvas.SetTop(button, 100); this.Content = canvas; };
devmasters.com.mx
XAML dinmico
Clase XamlReader
System.Windows.Markup Permite interpretar una cadena de XAML La cadena requiere un Espacio de Nombres XML
StringBuilder sb = new StringBuilder(); sb.Append(@"<Canvas xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>"); sb.Append(@"<Rectangle Width='100' Height='100' Fill='Red' Name='rec1' />"); sb.Append(@"</Canvas>");
XAML dinmico
Clase XamlReader
Si se usa el atributo Name o x:Name se crear un mbito privado a ese rbol
var canvas = XamlReader.Load(sb.ToString()) as FrameworkElement; canvas.FindName("rec1"); // S lo encontrar this.LayoutRoot.Children.Add(canvas); this.LayoutRoot.FindName("rec1"); // No lo encontrar
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
24
devmasters.com.mx
XAML Reusable
XAML reusable
XAML est ligeramente fragmentado
Aplicaciones Metro de Windows 8
WPF
Silverlight 5
Silverlight 4
Windows Phone 7.x Windows Phone 8
devmasters.com.mx
XAML reusable
Estrategias para reutilizacin
Usar Diccionarios de Recursos Mezclados Separar al mximo las preocupaciones (MVVM) Evitar la creacin dinmica de XAML en cdigo Mantener el rbol visual lo ms compacto posible Usar distribuciones dinmicas y evitar las estticas
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
25
devmasters.com.mx
XAML reusable
Windows 8.x Windows Phone 8 Silverlight 5 WPF
XAML reusable
Cdigo compartido
Lgica de Negocio Integracin con la Nube Acceso a Base de Datos
devmasters.com.mx
Enlace de Datos
Enlace de Datos
Destino del Enlace
FrameworkElement
Propiedad Dependiente Objeto de Enlance (Binding)
Convertidor de Valores
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
26
devmasters.com.mx
Enlace de Datos
Modelo robusto
Objeto Fuente
Propiedad en el Objeto Fuente
Control Destino
Propiedad en el Control Destino
Enlace de Datos
Parmetros principales de {Binding}
Source
Indica el Objeto fuente
Path
Indica una ruta a la Propiedad en el Objeto fuente Parmetro predeterminado
Mode
Indica el modo para el Enlace
devmasters.com.mx
Modos de Enlace
OneTime
El enlace se establece y el Objeto fuente y el Control destino no se vuelven a comunicar entre s
OneWay
El enlace se establece y cualquier cambio que suceda en el Objeto fuente le avisar al Control destino Predeterminado
TwoWay
El enlace se establece y cualquier cambio que suceda en el Objeto fuente le avisar al Control destino y viceversa (bi-direccional)
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
27
devmasters.com.mx
Modos de Enlace
Se expresan a travs del atributo Mode <TextBlock Text="{Binding Source={StaticResource disco1}, Path=Titulo, Mode=OneTime}" />
devmasters.com.mx
Interfaces
Los modos OneWay y TwoWay requieren que el Objeto fuente implemente alguna de las Interfaces INotifyPropertyChanged o INotifyCollectionChanged
Implementan un evento el cual es escuchado en la infraestructura de Enlace de Datos INotifyPropertyChanged en objetos individuales, para notificar que una propiedad ha cambiado INotifyCollectionChanged en colecciones, para notificar que la coleccin ha cambiado
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
28
devmasters.com.mx
Interfaces
Ejemplo con INotifyPropertyChanged
public class Album : INotifyPropertyChanged { string titulo; public string Titulo { get { return titulo; } set { titulo = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Titulo")); } } public string Banda { get; set; } public event PropertyChangedEventHandler PropertyChanged; }
devmasters.com.mx
Interfaces
Es recomendable tener un mtodo utilitario en la clase o en una clase base para disparar el evento
void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } string nombre; public string Nombre { get { return nombre; } set { nombre = value; OnPropertyChanged("Nombre"); } }
devmasters.com.mx
Interfaces
Windows Phone 8 soporta el atributo CallerMemberName
Obtiene automticamente el nombre del mtodo o propiedad que llam al mtodo en cuestin Evita el uso de cadenas mgicas difciles de dar mantenimiento Disponible en System.Runtime.CompilerServices
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
29
devmasters.com.mx
Interfaces
CallerMemberName
void OnPropertyChanged([CallerMemberName] string propertyName = null) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }
Interfaces
El cambio se notificar automticamente desde el Objeto fuente hacia el Control destino
private void button1_Click(object sender, RoutedEventArgs e) { //La IU se actualizar automticamente (this.Resources["album1"] as Datos.Album).Titulo = "Let it Be"; }
devmasters.com.mx
Interfaces
Ejemplo con INotifyCollectionChanged
public class Personas : Collection<Persona>, INotifyCollectionChanged { protected override void InsertItem(int index, Persona item) { base.InsertItem(index, item); OnCollectionChanged(NotifyCollectionChangedAction.Add, index, item); } protected override void RemoveItem(int index) { base.RemoveItem(index); OnCollectionChanged(NotifyCollectionChangedAction.Remove, index); } protected override void SetItem(int index, Persona item) { Persona oldItem = this[index]; base.SetItem(index, item); OnCollectionChanged(NotifyCollectionChangedAction.Replace, item, oldItem, index); } public event NotifyCollectionChangedEventHandler CollectionChanged; } devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
30
devmasters.com.mx
Interfaces
NotifyCollectionChangedEventArgs tiene tres constructores
Se ha agregado un elemento en la coleccin Se ha removido un elemento en la coleccin Se ha cambiado un elemento en la coleccin
ObservableCollection<T>
Coleccin genrica recomendada para escenarios de Enlace de Datos Implementa INotifyPropertyChanged y INotifyCollectionChanged Automticamente actualiza el control de lista al que est enlazada System.Collections.ObjectModel
Demo: ObservableCollection<T>
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
31
devmasters.com.mx
Contexto de Datos
Propiedad FrameworkElement.DataContext Permite establecer un Objeto como fuente de datos en un control o en un contenedor padre en la jerarqua (inmediato o no) Todos los hijos adquieren el DataContext ms inmediato
<Grid x:Name="LayoutRoot" DataContext="{StaticResource album1}"> <TextBlock FontSize="24" Text="{Binding Path=Titulo, Mode=OneWay}" /> </Grid>
devmasters.com.mx
Contexto de Datos
Se va al elemento padre Checa si tiene DataContext Checa si tiene Source
Inicio
devmasters.com.mx
Contexto de Datos
TextBlock Grid StackPanel CheckBox TextBox
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
32
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
33
devmasters.com.mx
Parmetro StringFormat
Establece un formato para presentar correctamente las cadenas
devmasters.com.mx
Parmetro TargetNullValue
Indica qu se mostrar cuando el valor sea null
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
34
devmasters.com.mx
Parmetro FallbackValue
Indica qu se mostrar cuando la expresin de Enlace cause un error
Plantillas de Datos
Plantillas de Datos
Expresan el XAML que representa a cada uno de los elementos en un control de lista
<DataTemplate> <StackPanel> <TextBlock Text="{Binding Titulo}" FontWeight="Bold" FontSize="14" /> <TextBlock Text="{Binding Banda}" /> </StackPanel> </DataTemplate>
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
35
devmasters.com.mx
Plantillas de Datos
Se expresan con el elemento DataTemplate
En la propiedad ItemTemplate de los Controles de Lista, en lnea o referenciando un Recurso
<ListBox Name="listBox1" ItemsSource="{Binding}" Margin="50,50,204,50"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Titulo}" FontWeight="Bold" FontSize="14" /> <TextBlock Text="{Binding Banda}" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
devmasters.com.mx
Plantillas de Datos
Pueden tener cualquier contenido en XAML
<DataTemplate x:Key="AlbumDataTemplate"> <StackPanel> <TextBlock Text="{Binding Titulo}" FontWeight="Bold" FontSize="14" /> <TextBlock Text="{Binding Banda}" /> <Button Width="60" Height="20" Click="Button_Click">Comprar</Button> </StackPanel> </DataTemplate>
devmasters.com.mx
Plantillas de Datos
La manera ms sencilla es utilizar Blend para la creacin y edicin de Plantillas de Datos
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
36
devmasters.com.mx
Plantillas de Datos
Si estn declaradas en los Recursos, pueden ser reutilizadas entre diferentes controles de lista
<ListBox ItemTemplate="{StaticResource AlbumesDataTemplate}" />
devmasters.com.mx
Convertidores de Valor
Clases que implementan la interfaz IValueConverter La interfaz IValueConverter incluye dos mtodos a implementar:
Convert
Mtodo que se ejecuta cuando el valor fluye del Objeto fuente hacia el Control destino
ConvertBack
Mtodo que se ejecuta cuando el valor fluye de regreso: del Control destino hacia el Objeto fuente
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
37
devmasters.com.mx
Convertidores de Valor
Ejemplo:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int entrada = (int)value; SolidColorBrush resultado = new SolidColorBrush(Colors.Green); if (entrada < 50) { resultado = new SolidColorBrush(Colors.Red); } return resultado; }
devmasters.com.mx
Convertidores de Valor
Se usan declarndolos en un Diccionario de Recursos e invocndolos a travs del parmetro Converter
<UserControl.Resources> <local:InventarioConverter x:Key="InventarioConverter" /> </UserControl.Resources> <TextBlock Text="{Binding Banda} Foreground="{Binding Inventario, Converter={StaticResource InventarioConverter}}" />
devmasters.com.mx
Convertidores de Valor
De manera opcional, pueden recibir parmetros
Se establecen a travs del atributo ConverterParameter en {Binding}
<TextBlock Text="{Binding Banda}" Foreground="{Binding Inventario, Converter={StaticResource InventarioConverter}, ConverterParameter=255,255,0}" />
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
38
devmasters.com.mx
Principio de Blendability
Muchas veces, no podemos darnos cuenta de cmo se vera nuestra Aplicacin
devmasters.com.mx
Principio de Blendability
Habilidad para que nuestra Interfaz de Usuario se vea correctamente en tiempo de diseo
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
39
devmasters.com.mx
Principio de Blendability
La idea es tener datos de ejemplo, que nos ayuden a tener una vista clara de cmo se vera el diseo Propiedad DesignerProperties.IsInDesignTool
System.ComponentModel Indica si el cdigo est ejecutando en tiempo de diseo
if (System.ComponentModel.DesignerProperties.IsInDesignTool) { Add(new Album() { Banda = "The Beatles", Titulo = "Help!" }); Add(new Album() { Banda = "The Beatles", Titulo = "Revolver"}); Add(new Album() { Banda = "The Beatles", Titulo = "For Sale"}); Add(new Album() { Banda = "The Beatles", Titulo = "Abbey Road"}); }
devmasters.com.mx
Principio de Blendability
Con datos de ejemplo, podemos editar las Plantillas de Datos de una manera ms eficiente
devmasters.com.mx
Demo: Blendability
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
40
devmasters.com.mx
Comandos
Son funcionalidad enlazable Clases que implementan la interfaz ICommand Miembros:
Execute: Indica qu accin se realizar CanExecute: Determina si el Comando puede ejecutar CanExecuteChanged: Re-evala el CanExecute
devmasters.com.mx
Comandos
Estn soportados en la familia de clases ButtonBase y en la clase HyperLink
Button CheckBox RadioButton HyperlinkButton ToggleButton RepeatButton Etc.
devmasters.com.mx
Comandos
Utiliza los atributos Command y CommandParameter para enlazar <Button Content="Consultar..." Command="{Binding GetAlbumCommand}" CommandParameter="{Binding Text, ElementName=textBox1}" />
devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
41
devmasters.com.mx
Comandos
Implementacin bsica
public class ConsultaCommand : ICommand { Action action; public ConsultaCommand(Action action) { this.action = action; } public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { action(); } }
devmasters.com.mx
Comandos
Implementaciones existentes recomendadas
Prism 4.1 (clase DelegateCommand) MVVM Light (clase RelayCommand)
public DelegateCommand ConsultaCommand { get; private set; } public ViewModel() { ConsultaCommand = new DelegateCommand(()=> ... ); }
devmasters.com.mx
Demo: Comandos
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
42
devmasters.com.mx
Resumen
Preguntas?
Este documento se distribuye con una licencia de tipo Atribucin-CompartirIgual 3.0 Unported. Para ms informacin consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compaas Microsoft.
43