SlideShare ist ein Scribd-Unternehmen logo
1 von 59
WPF
XAML
XAML
• Programação declarativa
Extensible Application Markup Language (XAML)
Linguagem de marcação para interfaces gráficas
• Facilita a colaboração entre designers e desenvolvedores
Separação entre código e conteúdo (Programação - Lógica)
Manipulação facilitada para ferramentas
Arquivos XAML, quando representados como texto, são arquivos
XML que geralmente tem a extensão .xaml
Sintaxe de atributo
Propriedades de um objeto com frequência podem ser expressas como atributos do elemento de
objeto. A sintaxe de atributo é a sintaxe mais simplificada de configuração de propriedades e a mais
intuitiva para o desenvolvedores que já usaram alguma linguagem de marcação
Click here
<StackPanel>
<Button Background="Blue"
Foreground="Red" Content=”Click
here"/>
</StackPanel>
Sintaxe de propriedade de elemento
Quando o objeto ou as informações necessárias para fornecer o valor da propriedade não podem ser
expressos dentro das aspas ou há restrições de caracteres, utilizamos uma construção um pouco mais
complexa com o aninhamento de tags.
Click here
<Button>
<Button.Background>
<SolidColorBrush Color="Blue"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="Red"/>
</Button.Foreground>
<Button.Content>
Click here
</Button.Content>
</Button>
Como funciona?
<StackPanel Grid.Row="1" Margin="120,30" >
<TextBlock Text="Qual o seu nome? " />
<StackPanel Orientation="Horizontal" Margin="0,20,0,20">
<TextBox x:Name="nameInput" Width="300"
HorizontalAlignment="Left" />
<Button Content="Dizer &quot;Olá&quot;" />
</StackPanel>
<TextBlock x:Name="greetingOutput" />
</StackPanel>
<StackPanel Grid.Row="1" Margin="30" >
<TextBlock Text="Qual o seu nome?" />
<StackPanel Orientation="Horizontal" Margin="0,20,0,20">
<TextBox x:Name="nameInput" Width="210"
HorizontalAlignment="Left" />
<Button Content="Dizer &quot;Olá&quot; " />
</StackPanel>
<TextBlock x:Name="greetingOutput" />
</StackPanel>
Como funciona?
private void Button_Click(object sender,
RoutedEventArgs e)
{
#if WINDOWS_APP
greetingOutput.Text = "Olá, " +
nameInput.Text +
". Bem vindo ao Windows 8.1!!";
#endif
#if WINDOWS_PHONE_APP
greetingOutput.Text = "Olá, " +
nameInput.Text +
". Bem vindo ao Windows Phone
8.1!!";
#endif
}
Componentes Básicos
Controles de
Layout
Primitivas para
desenho
Manipulação de
imagens e mídia
Controles de UI
Componentes
Componentes
Button
Checkbox
Combo Box
Date Picker
Radio Button
Hyperlink
ListBox
Progress Bar
Time Picker
Toggle Switch
Slider
Controles de Layout
• Grid
• StackPanel
• Canvas
• VariableSizedWrapGrid
São painéis de layout com o intuito de organizar um grupo de elementos de interface do usuário em
seu aplicativo (Ellipse, Rectangle, Textblock, etc)
O que deve ser considerado principalmente ao escolher um deles é como cada um funciona ao
posicionar e dimensionar os seus elementos filhos
Necessário considerar a sobreposição dos elementos filhos, como vão ficar uns sobre os outros
Os painéis de layout que temos em XAML são
Controles de Layout
• Exemplos: FlipView, ListView, GridView, etc
Permitem painéis dentro de painéis
Podem ser colocados como conteúdo de outros controles
Controles de Layout
Canvas: controles filhos provêm seu próprio posicionamento
Grid: controles filhos são posicionados em linhas e colunas
StackPanel: controles filhos são “empilhados” verticalmente ou horizontalmente
VariableSizedWrapGrid: controles filhos são posicionados em linhas ou colunas que se ajustam
automaticamente em uma nova linha ou coluna
Controles de Layout
• Width, Height: usados para definir dimensões fixas
• MinWidth, MinHeight, MaxWidth, MinHeight: restringir os tamanhos entre os limites especificados.
• Margin, Padding: define quanto espaço deve ser deixado vazio em torno do controle filho em relação
ao pai e dentro do controle filho em torno de seu conteúdo.
• Alignment (Vertical/Horizontal): posição do controle filho em relação ao pai
• Content Alignment (Vertical/Horizontal): alinhamento do conteúdo dentro do controle
• Visibility: mostrar ou esconder o controle
Propriedades básicas para controlar o tamanho e posição do componente
Controles de Layout - Canvas
Os elementos podem ser explicitamente posicionados
Posicionamento relativo às bordas do painel
Mais utilizado com elementos gráficos
<Canvas Background="Transparent">
<Rectangle Canvas.Left="50" Canvas.Top="80" Fill="red" Width="160" Height="80"/>
<Rectangle Canvas.Left="250" Canvas.Top="180" Fill="blue" Width="200" Height="120"/>
</Canvas>
(50, 50)
(200, 150)Canvas Top
Canvas Left
Controles de Layout - Canvas
• Com último vindo na frente dos demais
Os elementos são apresentados na ordem em que eles são instanciados
• Valor inteiro arbitrário
• Menor valor em baixo, maior valor em cima
Canvas.Zindex - propriedade que ajuda a definir a ordem
<Canvas>
<Rectangle Width="100" Height="100” Canvas.Left="30" Canvas.Top="30”
Fill="Red" />
<Rectangle Width="100" Height="100" Canvas.Left="30" Canvas.Top="45"
Fill="Green" />
<Rectangle Width="100" Height="100" Canvas.Left="90" Canvas.Top="30"
Fill="Blue" Canvas.Zindex="1" />
<Rectangle Width="100" Height="100" Canvas.Left="90" Canvas.Top="45"
Fill="Yellow" Canvas.Zindex="0" />
</Canvas>
Controles de Layout - Canvas
Os elementos podem ser posicionados em painéis verticais, horizontais ou empilhados
Para evitar, utiliza-se HorizontalAlignment e VerticalAlignment
<StackPanel Margin="20">
<Rectangle Fill="Red" Width="50" Height="50" Margin="5" />
<Rectangle Fill="Blue" Width="50" Height="50" Margin="5" />
<Rectangle Fill="Green" Width="50" Height="50" Margin="5" />
<Rectangle Fill="Purple" Width="50" Height="50" Margin="5" />
</StackPanel>
Controles de Layout - StackPanel
Orientation: VerticalStack 0
Stack 1
Stack 2
Stack 3
Orientation: Horizontal
Stack 0 Stack 1 Stack 2 Stack 3
Controles de Layout - Grid
É bastante versátil
Os elementos podem ser posicionados em linhas e colunas
Possui uma coleção de definição de linhas e colunas
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="Linha 0 Coluna 0" Grid.Row="0" Grid.Column="0"/>
<Button Content="Linha 1 Coluna 0" Grid.Row="1" Grid.Column="0"/>
<Button Content="Linha 1 Coluna 1" Grid.Row="1" Grid.Column=“1"/>
<TextBlock Text="Linha 0 Coluna 1" Grid.Row=“0" Grid.Column=“1"/>
</Grid>
Controles de Layout - Grid
Três definições para altura e largura de linhas e colunas
• Fixo - especificado em pixel independente
• Automático - o tamanho necessário
• Proporcional - tamanhos relativos ao espaço total (suporta multiplicadores ou “pesos”), mudam se o
painel é redimensionado
<RowDefinition Width="50" />
<RowDefinition Width="Auto" />
<RowDefinition Width="*" />
<RowDefinition Width="2*" />
Controles de Layout - Grid
1 /3 do espaço 1 /3 do espaço 1 /3 do espaço
1 /4 do espaço 2 /4 do espaço 1 /4 do espaço
1 /4 do espaço 2 /4 do espaço 1 /4 do espaço
Controles de Layout - Grid
Propriedades RowSpan e ColumnSpan
• Especificar o número de linhas ou colunas
Elementos podem se expandir por linhas e colunas
<Button Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">
2 células
</Button>
<Button Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="2">
4 células
</Button>
Desafio
Aprendemos como usar diferentes controles de layouts e assim podemos organizar os
elementos que quisermos para os nosso aplicativos.
Agora vamos praticar, usando os controles que foram apresentados e vamos criar o que
estão nessas imagens abaixo em XAML, e como vimos o que devemos considerar
principalmente na escolha do controle é como o posicionamento de cada um funciona.
Desafio
Controles de UI
Controles são objetos individuais ou compostos que possibilitam uma relação iterativa entre si e com o
usuário
• Ex.: Button, CheckBox, ListBox, TextBox, etc
Controles de Texto
Apresentam uma string de texto
• Texto simples somente de leitura
TextBlock
• Caixa de entrada de texto
• Suporta linha simples ou múltiplas linhas
TextBox
• Caixa de entrada de texto mascarada
PasswordBox
• Texto com formatação rica
RichTextBlock e RichEditBox
Controles de Texto
<TextBlock Margin="10" Text="TextBlock" />
<TextBlock Margin="10">
<Run FontFamily="Arial" FontSize="20">TextBlock</Run>
<LineBreak />
<Run FontFamily="Verdana" FontWeight="Bold" FontSize="14">using Inlines</Run>
</TextBlock>
<TextBox Margin="10" HorizontalAlignment="Left" Width="100" Text="Microsoft Innovation Centers are
state of the art technology facilities for collaboration on innovative technology and software
solutions." FontFamily="Arial" TextWrapping="Wrap" />
<RichTextBlock>
<Paragraph>
<Bold>Microsoft Innovation Centers (MIC)</Bold> are facilities that provide world
class resources and support for students, entrepreneurs and startups.
<LineBreak/>
</Paragraph>
<Paragraph><Bold>MICs</Bold> work broadly across their communities, providing services,
solutions and programs that meet the needs of many audiences, including Students, Entrepreneurs,
Governments, and Local Industries.
</Paragraph>
</RichTextBlock>
Resource Controls
Source – propriedade que atribui o conteúdo do controle como uma URL absoluta ou relativa
Ex.: Image, MediaElement, WebView
Content Controls
Content – propriedade que atribui o conteúdo do controle (qualquer objeto possível de ser renderizado)
• Ex: Button, CheckBox, etc
Esses tipos de controles aceitam somente um único conteúdo filho
Conteúdo é obtido através de ToString() ou OnRender()
Importante: mudar o conteúdo de um controle não muda suas características básicas (pense no
comportamento de um Button…); para alterar características mais profundas utiliza-se o control template
Sintaxe do tipo
"Property
Element"
Content Controls
<Button>
<Image Source="imagem.jpg“/>
</Button>
<Button>
<Button.Content>
<Image Source="imagem.jpg“/>
</Button.Content>
</Button>
<Button>Conteúdo</Button>
<Button Content="Conteúdo" />
Controles de Botão
São controles com ação associada
• Dispara eventos de click
Button
HyperlinkButton
• Dispara uma navegação entre páginas
<Button>Clique</Button>
<Button Content="Clique" />
<HyperlinkButton Content="Clique aqui para mais informações"
NavigateUri="https://dev.windows.com/en-us" TargetName="_blank" />
Item Controls
Items – propriedade que indica a coleção de objetos do tipo de item apropriado para o controle
ItemsSource – propriedade que indica uma coleção IEnumerable como fonte de dados
Ex.: ListBox (ListBoxItem), ComboBox (ComboBoxItem), FlipView (FlipViewItem), etc
Item Controls
<ComboBox Width="400" Height="50">
<ComboBox.Items>
<ComboBoxItem Content="Item 1" />
<ComboBoxItem Content="Item 2" />
<ComboBoxItem Content="Item 3" />
</ComboBox.Items>
</ComboBox>
<ComboBox x:Name="UriBox1" Width="400" Height="50" />
ObservableCollection<Uri> Uris = new ObservableCollection<Uri>();
Uris.Add(new Uri("https://dev.windowsphone.com/dashboard"));
Uris.Add(new Uri("https://appdev.microsoft.com/storeportals/"));
Uris.Add(new Uri("http://dev.windows.com/"));
UriBox1.ItemsSource = Uris;
Elementos Gráficos
• 2D e 3D
• Aceleração de hardware
• Preferência por desenhos vetoriais
Características
Categorias de elementos
• Figuras (Shapes)
• Pincéis (Brushes)
• Transformações (Transforms)
Brushes
• SolidColorBrush: diferentes preenchimentos para cores sólidas
• LinearGradientBrush: preenchimento para gradientes lineares
• ImageBrush: preenchimento para imagens
• WebViewBrush: usado para processar o conteúdo de um controle WebView como uma solução para o
fato de que o próprio WebView é sempre prestados em cima de outros controles.
Responsável pela formatação dos controles
SolidColorBrush
<StackPanel>
<Rectangle Width="100" Height="100" Fill="Red"
/>
<Rectangle Width="100" Height="100"
Fill="#FFFF0000" />
</StackPanel>
<Rectangle Width="200" Height="150">
<Rectangle.Fill>
<SolidColorBrush Color="Blue"
Opacity="0.5" />
</Rectangle.Fill>
</Rectangle>
LinearGradientBrush
<Rectangle Width="400" Height="200">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,1">
<GradientStop Color="Yellow"
Offset="0.0" />
<GradientStop Color="Red"
Offset="0.25" />
<GradientStop Color="Blue"
Offset="0.75" />
<GradientStop Color=”Green"
Offset="1.0" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Width="400" Height="200">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,1">
<GradientStop Color="Yellow” />
<GradientStop Color="Red" Offset=”1"
/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
ImageBrush
<Rectangle Width="400" Height="400">
<Rectangle.Fill>
<ImageBrush
ImageSource="img.png"
Stretch="None"
AlignmentX="Left"
AlignmentY="Center" />
</Rectangle.Fill>
</Rectangle>
Figuras
• Linhas, elipses, retângulos e polígonos
Representam elementos primitivos
• Shape, Line, Ellipse, Rectangle, Polyline, Polygon, Path
Principais classes
• Possuem o mesmo comportamento dos outros elementos!
Derivam de FrameworkElement
Mais utilizadas dentro de Canvas
Figuras
<Ellipse Fill="Yellow" Stroke="Blue" Height="100" Width="100" Margin="5"
HorizontalAlignment="Left"></Ellipse>
<Rectangle Fill="Yellow" Stroke="Blue" Height="50" Width="100" Margin="5"
HorizontalAlignment="Left"></Rectangle>
<Line Stroke="Blue" X1="0" Y1="0" X2="10" Y2="100" StrokeThickness="5">
</Line>
<Polyline Stroke="Blue" StrokeThickness="5" Points="10,150 30,140 50,160
70,130 90,170 110,120 130,180 150,110 170,190 190,100 210,240"></Polyline>
<Polygon Stroke="Blue" StrokeThickness="1" Fill="Yellow" Canvas.Left="10"
Canvas.Top="175" FillRule="Nonzero" Points="15,200 68,70 110,200 0,125
135,125"></Polygon>
Tranformações
• TranslateTransform
• RotateTranform
• ScaleTransform
• SkewTransform
Diversas classes que cuidam dessas transformações
• TransformGroup (representa uma transformação composta por outras transformações)
• MatrixTransform (cria uma matriz para transformação, que consiste em uma transformação linear
seguida de uma translação)
Classes adicionais
Rotate Transform
Rotaciona o elemento por um ângulo especificado
<TextBlock Text="student to business" Foreground="White" FontSize="20">
<TextBlock.RenderTransform>
<RotateTransform Angle="90" />
</TextBlock.RenderTransform>
</TextBlock>
Ex.: texto rotacionado num ângulo de 90º
no sentido horário.
Scale Transform
Altera a escala de um objeto 2-D através das coordenadas “ScaleX” e “ScaleY”
<TextBlock FontSize="32" FontWeight="Bold" Foreground="White" Text="student to business">
<TextBlock.RenderTransform>
<ScaleTransform ScaleX="4" ScaleY="2" />
</TextBlock.RenderTransform>
</TextBlock>
Translate Transform
Move um objeto de um ponto de coordenadas (x1,y1) para outro ponto de coordenadas (x2,y2)
<TextBlock Foreground="White" Text="student to business” FontSize="40"
FontWeight="Bold">
<TextBlock.RenderTransform>
<TranslateTransform X="9" Y="6" />
</TextBlock.RenderTransform>
</TextBlock>
Ex.: texto movido para o ponto (9,6) a partir de
seu ponto inicial (0,0).
Ponto Origem (0,0)
(9,6)
Skew Transform
Coloca um objeto em perspectiva através de ângulos especificados, “AngleX” e “AngleY”. Cria uma ilusão
3-D nos objetos 2-D
<TextBlock FontSize="32" FontWeight="Bold" Foreground="White" Text="student to
business">
<TextBlock.RenderTransform>
<SkewTransform AngleX="20" AngleY="10" />
</TextBlock.RenderTransform>
</TextBlock>
Ex.: texto em perspectiva num ângulo
de 20º no eixo X e 10º no ângulo Y.
Eventos e Comandos
Eventos
Os conceitos de eventos em Windows Runtime são semelhantes ao modelo de evento nas linguagens
de programação mais usadas
Define-se um método para tratar o evento quando este mesmo for disparado
Manipuladores de Eventos
Para objetos que são elementos da interface do usuário e foram declarados em XAML, o código de
manipulador de eventos é definido na classe parcial que opera como o code-behind de uma página
XAML. Manipuladores de eventos são métodos que você escreve como parte da classe parcial associada
ao XAML
<Button x:Name="btName” FontSize="40 Click="btName_Click">
Microsoft Innovation Center
</Button>
private void btName_Click(object sender, RoutedEventArgs e)
{
Button bt = (Button)sender;
if (bt != null)
{
bt.Foreground = new SolidColorBrush(Colors.SpringGreen);
}
}
Manipuladores de Eventos - Adicionando
XAML não é a única forma de atribui um manipulador de eventos a um objeto
Você registra o manipulador fazendo referência ao nome do método manipulador de eventos no lado
direito do operador
btName.Click += btName_Click;
btName.Click += new RoutedEventHandler(btName_Click);
Obs.: Se você está usando código para adicionar manipuladores de eventos a objetos que aparecem na
interface do usuário em tempo de execução, uma prática comum é adicionar esses manipuladores em
resposta a um evento de ciclo de vida do objeto ou de retorno de chamada – como, por exemplo,
Loaded ou OnApplyTemplate, de maneira que os manipuladores de eventos no objeto relevante estejam
prontos para eventos iniciados pelo usuário no tempo de execução
Vinculação de Dados (Data Binding)
Vinculação de Dados
Vinculação (data binding) é o processo de estabelecer uma conexão entre valores de propriedades de
objetos
• Usualmente a fonte é um elemento de dados (do ViewModel) e o alvo é um componente de interface
com o usuário (view)
• Vinculação também acontece entre dois elementos do XAML (esse é o tipo mais simples de vinculação)
• Baseado em um padrão Observer para a notificação de alteração dos dados vinculados
Vinculação de Dados - Funcionamento
Vinculação (data binding) é o processo de estabelecer uma conexão entre valores de propriedades de
objetos
• Target Object - Objeto Alvo os componentes do XAML (ex. TextBox, Listbox, etc)
• Dependency Property - A propriedade do objeto que vai receber o dado (ex. Text, Source, etc)
• Source Object - fonte dos dados (ex. um objeto Pessoa)
• Property - Um caminho para o valor no Source Object(ex. propriedade Nome)
• Value Converter - Conversor de valores entre as propriedades caso necessário (ex. Data de Nascimento)
Source Object
Property
Value Converter
Binding
Target Object
Dependency Property
Vinculação de Dados
<TextBox x:Name="txtData"
Text="{Binding DayOfWeek, Mode=OneWay}"
/>
<TextBox x:Name="txtData">
<TextBox.Text>
<Binding Path="DayOfWeek" Mode="OneWay" />
</TextBox.Text>
</TextBox>
DateTime currentTime = DateTime.Now;
txtData.DataContext = currentTime;
Binding Mode
Source Object - currentTime
Property - DayOfWeek
Target Object - txtData
Dependency Property - Text
Vinculação de Dados
Objeto Binding configura a vinculação
• Para especificar a fonte
○ ElementName – nome do elemento fonte
○ Source – nome do objeto (que não é elemento) fonte
◘ Usualmente utiliza-se DataContext no elemento alvo
○ RelativeSource – caminho do elemento na árvore visual relativo ao objeto alvo
○ Path – caminho para a propriedade fonte
• Para especificar o modo de funcionamento
○ Mode – especifica a direção do fluxo de dados
○ Converter – especifica um objeto de conversão de dados
Principais propriedades
Vinculação de Dados
Propriedade Mode do objeto Binding permite configurar a direção do fluxo de dados
• OneWay – origem automaticamente atualiza o destino, mas atualizações do destino não se propagam
para a origem; modelo padrão
• TwoWay – qualquer alteração na origem ou destino é propagada para o outro
• OneTime – origem inicializa o valor do destino quando a vinculação é criada, mas não propaga
alterações subsequentes
Vinculação de Dados
Padrão Observer para notificação de alterações caso a fonte seja um objeto de negócio de uma
aplicação
Objetos devem implementar serviços de notificação, como a interface INotifyPropertyChanged ou
INotifyCollectionChanged
Para coleções utiliza-se usualmente ObservableCollection<T> que já implementa as propriedades
necessárias
Vinculação de Dados
Como devemos utilizar a propriedade Mode do objeto Binding de forma a facilitar o desenvolvimento e
minimizar a quantidade de códigos para determinadas ações?
Vinculação de Dados
<StackPanel Grid.Row="1" Width="400" VerticalAlignment="Center">
<StackPanel Grid.Row="1" Width="400"
VerticalAlignment="Center" DataContext="{Binding Pessoa}">
<TextBox PlaceholderText="Nome" Margin="10"
Text="{Binding Nome, Mode=TwoWay}"></TextBox>
<DatePicker HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" Margin="10”
Date="{Binding DataNascimento, Mode=TwoWay}"/>
</StackPanel>
<StackPanel Margin="10" DataContext="{Binding Pessoa}">
<TextBlock FontSize="30" Foreground="White" FontWeight="Normal"
HorizontalAlignment="Left" Margin="5” Text="{Binding Nome}"></TextBlock>
<TextBlock FontSize="25" Foreground="White" FontWeight="Normal"
HorizontalAlignment="Left" Margin="5”
Text="{Binding DataNascimento,Converter={StaticResource DataConverter},
ConverterParameter='{day.integer(2)}/{month.integer(2)}/{year.full}'}">
</TextBlock>
</StackPanel>
</StackPanel>
Vinculação de Dados
A classe a ser informada que houve alguma alteração nos dados deve ser montada do formato ao lado,
implementando a interface INotifyPropertyChanged e no setter de cada propriedade chamar a notificação pelo
nome. public class Pessoa : INotifyPropertyChanged {
private string _nome;
public string Nome
{
get { return _nome; }
set { _nome = value;
NotifyPropertyChanged("Nome");}
}
private DateTimeOffset _dataNascimento;
public DateTimeOffset DataNascimento
{
get { return _dataNascimento; }
set { _dataNascimento = value;
NotifyPropertyChanged("DataNascimento");}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{ PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }
}
}

Weitere ähnliche Inhalte

Andere mochten auch

Gen rx power point
Gen rx power pointGen rx power point
Gen rx power pointprogroup
 
Cideb -module 2
Cideb -module 2Cideb -module 2
Cideb -module 2Lore Lazos
 
Learning through the_arts
Learning through the_artsLearning through the_arts
Learning through the_artsSaFaRiNa84
 
Chariots of death murder mystery
Chariots of death murder mysteryChariots of death murder mystery
Chariots of death murder mysteryKathy Page-Applebee
 
Kundalini Yoga - An Introduction
Kundalini Yoga - An IntroductionKundalini Yoga - An Introduction
Kundalini Yoga - An IntroductionToucanSam
 
Kowakae6 pre
Kowakae6 preKowakae6 pre
Kowakae6 pretaka_tako
 
How to Fight the Super Bugs
How to Fight the Super Bugs How to Fight the Super Bugs
How to Fight the Super Bugs Cindy McAsey
 
Social Prize - Awesome Benefits of Social Sweepstakes
Social Prize  - Awesome Benefits of Social SweepstakesSocial Prize  - Awesome Benefits of Social Sweepstakes
Social Prize - Awesome Benefits of Social SweepstakesYomar Lopez
 
Close to extinction/ Endangered Species in the Wild
Close to extinction/ Endangered Species in the WildClose to extinction/ Endangered Species in the Wild
Close to extinction/ Endangered Species in the WildZNHS West, DepEd
 
Masyarakat islam di iraq
Masyarakat islam di iraqMasyarakat islam di iraq
Masyarakat islam di iraqruziea
 

Andere mochten auch (16)

Gen rx power point
Gen rx power pointGen rx power point
Gen rx power point
 
Lectura sessió 5
Lectura sessió 5Lectura sessió 5
Lectura sessió 5
 
Cideb -module 2
Cideb -module 2Cideb -module 2
Cideb -module 2
 
テスト①
テスト①テスト①
テスト①
 
Learning through the_arts
Learning through the_artsLearning through the_arts
Learning through the_arts
 
Chariots of death murder mystery
Chariots of death murder mysteryChariots of death murder mystery
Chariots of death murder mystery
 
Kundalini Yoga - An Introduction
Kundalini Yoga - An IntroductionKundalini Yoga - An Introduction
Kundalini Yoga - An Introduction
 
Iv cf
Iv cfIv cf
Iv cf
 
Helpdesk
HelpdeskHelpdesk
Helpdesk
 
Meditation 4
Meditation 4Meditation 4
Meditation 4
 
Kowakae6 pre
Kowakae6 preKowakae6 pre
Kowakae6 pre
 
Kilt
KiltKilt
Kilt
 
How to Fight the Super Bugs
How to Fight the Super Bugs How to Fight the Super Bugs
How to Fight the Super Bugs
 
Social Prize - Awesome Benefits of Social Sweepstakes
Social Prize  - Awesome Benefits of Social SweepstakesSocial Prize  - Awesome Benefits of Social Sweepstakes
Social Prize - Awesome Benefits of Social Sweepstakes
 
Close to extinction/ Endangered Species in the Wild
Close to extinction/ Endangered Species in the WildClose to extinction/ Endangered Species in the Wild
Close to extinction/ Endangered Species in the Wild
 
Masyarakat islam di iraq
Masyarakat islam di iraqMasyarakat islam di iraq
Masyarakat islam di iraq
 

Ähnlich wie WPF XAML Fundamentos

Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Felipe Pimentel
 
Maratona Windows Phone 7
Maratona Windows Phone 7Maratona Windows Phone 7
Maratona Windows Phone 7Felipe Pimentel
 
Bootstrap praticas mais usadas
Bootstrap praticas mais usadas Bootstrap praticas mais usadas
Bootstrap praticas mais usadas Marconi Pacheco
 
Aula III HTML - Criação de Sites I
Aula III HTML - Criação de Sites IAula III HTML - Criação de Sites I
Aula III HTML - Criação de Sites Iinfo_cimol
 
Desenvolvimento CSS Cross-browser
Desenvolvimento CSS Cross-browserDesenvolvimento CSS Cross-browser
Desenvolvimento CSS Cross-browserSaulo Pratti
 
Criando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bindCriando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bindMurilo Siqueira Ferreira
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-endertdc-globalcode
 
Construindo layout de sites com CSS
Construindo layout de sites com CSSConstruindo layout de sites com CSS
Construindo layout de sites com CSSTalita Pagani
 
Uma breve introdução a css e bootstrap
Uma breve introdução a css e bootstrapUma breve introdução a css e bootstrap
Uma breve introdução a css e bootstrapMatheus Soares
 
XHTML, CSS e Semântica
XHTML, CSS e SemânticaXHTML, CSS e Semântica
XHTML, CSS e SemânticaAmanda Sposito
 

Ähnlich wie WPF XAML Fundamentos (20)

Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 
Maratona Windows Phone 7
Maratona Windows Phone 7Maratona Windows Phone 7
Maratona Windows Phone 7
 
XHTML Básico
XHTML BásicoXHTML Básico
XHTML Básico
 
CSS
CSSCSS
CSS
 
Bootstrap praticas mais usadas
Bootstrap praticas mais usadas Bootstrap praticas mais usadas
Bootstrap praticas mais usadas
 
Aula III HTML - Criação de Sites I
Aula III HTML - Criação de Sites IAula III HTML - Criação de Sites I
Aula III HTML - Criação de Sites I
 
Aula 20 div e spans
Aula 20 div e spansAula 20 div e spans
Aula 20 div e spans
 
Desenvolvimento CSS Cross-browser
Desenvolvimento CSS Cross-browserDesenvolvimento CSS Cross-browser
Desenvolvimento CSS Cross-browser
 
Minicurso CSS
Minicurso CSSMinicurso CSS
Minicurso CSS
 
RCOM 11ºAno - CSS
RCOM 11ºAno - CSSRCOM 11ºAno - CSS
RCOM 11ºAno - CSS
 
CSS & JQquery
CSS & JQqueryCSS & JQquery
CSS & JQquery
 
Curso android
Curso androidCurso android
Curso android
 
Web 3.0
Web 3.0Web 3.0
Web 3.0
 
Criando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bindCriando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bind
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-ender
 
Java 17 Swing
Java 17 SwingJava 17 Swing
Java 17 Swing
 
Construindo layout de sites com CSS
Construindo layout de sites com CSSConstruindo layout de sites com CSS
Construindo layout de sites com CSS
 
Php Básico - Parte 2
Php Básico - Parte 2Php Básico - Parte 2
Php Básico - Parte 2
 
Uma breve introdução a css e bootstrap
Uma breve introdução a css e bootstrapUma breve introdução a css e bootstrap
Uma breve introdução a css e bootstrap
 
XHTML, CSS e Semântica
XHTML, CSS e SemânticaXHTML, CSS e Semântica
XHTML, CSS e Semântica
 

WPF XAML Fundamentos

  • 1. WPF
  • 3. XAML • Programação declarativa Extensible Application Markup Language (XAML) Linguagem de marcação para interfaces gráficas • Facilita a colaboração entre designers e desenvolvedores Separação entre código e conteúdo (Programação - Lógica) Manipulação facilitada para ferramentas Arquivos XAML, quando representados como texto, são arquivos XML que geralmente tem a extensão .xaml
  • 4. Sintaxe de atributo Propriedades de um objeto com frequência podem ser expressas como atributos do elemento de objeto. A sintaxe de atributo é a sintaxe mais simplificada de configuração de propriedades e a mais intuitiva para o desenvolvedores que já usaram alguma linguagem de marcação Click here <StackPanel> <Button Background="Blue" Foreground="Red" Content=”Click here"/> </StackPanel>
  • 5. Sintaxe de propriedade de elemento Quando o objeto ou as informações necessárias para fornecer o valor da propriedade não podem ser expressos dentro das aspas ou há restrições de caracteres, utilizamos uma construção um pouco mais complexa com o aninhamento de tags. Click here <Button> <Button.Background> <SolidColorBrush Color="Blue"/> </Button.Background> <Button.Foreground> <SolidColorBrush Color="Red"/> </Button.Foreground> <Button.Content> Click here </Button.Content> </Button>
  • 6. Como funciona? <StackPanel Grid.Row="1" Margin="120,30" > <TextBlock Text="Qual o seu nome? " /> <StackPanel Orientation="Horizontal" Margin="0,20,0,20"> <TextBox x:Name="nameInput" Width="300" HorizontalAlignment="Left" /> <Button Content="Dizer &quot;Olá&quot;" /> </StackPanel> <TextBlock x:Name="greetingOutput" /> </StackPanel> <StackPanel Grid.Row="1" Margin="30" > <TextBlock Text="Qual o seu nome?" /> <StackPanel Orientation="Horizontal" Margin="0,20,0,20"> <TextBox x:Name="nameInput" Width="210" HorizontalAlignment="Left" /> <Button Content="Dizer &quot;Olá&quot; " /> </StackPanel> <TextBlock x:Name="greetingOutput" /> </StackPanel>
  • 7. Como funciona? private void Button_Click(object sender, RoutedEventArgs e) { #if WINDOWS_APP greetingOutput.Text = "Olá, " + nameInput.Text + ". Bem vindo ao Windows 8.1!!"; #endif #if WINDOWS_PHONE_APP greetingOutput.Text = "Olá, " + nameInput.Text + ". Bem vindo ao Windows Phone 8.1!!"; #endif }
  • 9. Controles de Layout Primitivas para desenho Manipulação de imagens e mídia Controles de UI Componentes
  • 10. Componentes Button Checkbox Combo Box Date Picker Radio Button Hyperlink ListBox Progress Bar Time Picker Toggle Switch Slider
  • 11. Controles de Layout • Grid • StackPanel • Canvas • VariableSizedWrapGrid São painéis de layout com o intuito de organizar um grupo de elementos de interface do usuário em seu aplicativo (Ellipse, Rectangle, Textblock, etc) O que deve ser considerado principalmente ao escolher um deles é como cada um funciona ao posicionar e dimensionar os seus elementos filhos Necessário considerar a sobreposição dos elementos filhos, como vão ficar uns sobre os outros Os painéis de layout que temos em XAML são
  • 12. Controles de Layout • Exemplos: FlipView, ListView, GridView, etc Permitem painéis dentro de painéis Podem ser colocados como conteúdo de outros controles
  • 13. Controles de Layout Canvas: controles filhos provêm seu próprio posicionamento Grid: controles filhos são posicionados em linhas e colunas StackPanel: controles filhos são “empilhados” verticalmente ou horizontalmente VariableSizedWrapGrid: controles filhos são posicionados em linhas ou colunas que se ajustam automaticamente em uma nova linha ou coluna
  • 14. Controles de Layout • Width, Height: usados para definir dimensões fixas • MinWidth, MinHeight, MaxWidth, MinHeight: restringir os tamanhos entre os limites especificados. • Margin, Padding: define quanto espaço deve ser deixado vazio em torno do controle filho em relação ao pai e dentro do controle filho em torno de seu conteúdo. • Alignment (Vertical/Horizontal): posição do controle filho em relação ao pai • Content Alignment (Vertical/Horizontal): alinhamento do conteúdo dentro do controle • Visibility: mostrar ou esconder o controle Propriedades básicas para controlar o tamanho e posição do componente
  • 15. Controles de Layout - Canvas Os elementos podem ser explicitamente posicionados Posicionamento relativo às bordas do painel Mais utilizado com elementos gráficos <Canvas Background="Transparent"> <Rectangle Canvas.Left="50" Canvas.Top="80" Fill="red" Width="160" Height="80"/> <Rectangle Canvas.Left="250" Canvas.Top="180" Fill="blue" Width="200" Height="120"/> </Canvas> (50, 50) (200, 150)Canvas Top Canvas Left
  • 16. Controles de Layout - Canvas • Com último vindo na frente dos demais Os elementos são apresentados na ordem em que eles são instanciados • Valor inteiro arbitrário • Menor valor em baixo, maior valor em cima Canvas.Zindex - propriedade que ajuda a definir a ordem <Canvas> <Rectangle Width="100" Height="100” Canvas.Left="30" Canvas.Top="30” Fill="Red" /> <Rectangle Width="100" Height="100" Canvas.Left="30" Canvas.Top="45" Fill="Green" /> <Rectangle Width="100" Height="100" Canvas.Left="90" Canvas.Top="30" Fill="Blue" Canvas.Zindex="1" /> <Rectangle Width="100" Height="100" Canvas.Left="90" Canvas.Top="45" Fill="Yellow" Canvas.Zindex="0" /> </Canvas>
  • 17. Controles de Layout - Canvas Os elementos podem ser posicionados em painéis verticais, horizontais ou empilhados Para evitar, utiliza-se HorizontalAlignment e VerticalAlignment <StackPanel Margin="20"> <Rectangle Fill="Red" Width="50" Height="50" Margin="5" /> <Rectangle Fill="Blue" Width="50" Height="50" Margin="5" /> <Rectangle Fill="Green" Width="50" Height="50" Margin="5" /> <Rectangle Fill="Purple" Width="50" Height="50" Margin="5" /> </StackPanel>
  • 18. Controles de Layout - StackPanel Orientation: VerticalStack 0 Stack 1 Stack 2 Stack 3 Orientation: Horizontal Stack 0 Stack 1 Stack 2 Stack 3
  • 19. Controles de Layout - Grid É bastante versátil Os elementos podem ser posicionados em linhas e colunas Possui uma coleção de definição de linhas e colunas <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock Text="Linha 0 Coluna 0" Grid.Row="0" Grid.Column="0"/> <Button Content="Linha 1 Coluna 0" Grid.Row="1" Grid.Column="0"/> <Button Content="Linha 1 Coluna 1" Grid.Row="1" Grid.Column=“1"/> <TextBlock Text="Linha 0 Coluna 1" Grid.Row=“0" Grid.Column=“1"/> </Grid>
  • 20. Controles de Layout - Grid Três definições para altura e largura de linhas e colunas • Fixo - especificado em pixel independente • Automático - o tamanho necessário • Proporcional - tamanhos relativos ao espaço total (suporta multiplicadores ou “pesos”), mudam se o painel é redimensionado <RowDefinition Width="50" /> <RowDefinition Width="Auto" /> <RowDefinition Width="*" /> <RowDefinition Width="2*" />
  • 21. Controles de Layout - Grid 1 /3 do espaço 1 /3 do espaço 1 /3 do espaço 1 /4 do espaço 2 /4 do espaço 1 /4 do espaço 1 /4 do espaço 2 /4 do espaço 1 /4 do espaço
  • 22. Controles de Layout - Grid Propriedades RowSpan e ColumnSpan • Especificar o número de linhas ou colunas Elementos podem se expandir por linhas e colunas <Button Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"> 2 células </Button> <Button Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="2"> 4 células </Button>
  • 24. Aprendemos como usar diferentes controles de layouts e assim podemos organizar os elementos que quisermos para os nosso aplicativos. Agora vamos praticar, usando os controles que foram apresentados e vamos criar o que estão nessas imagens abaixo em XAML, e como vimos o que devemos considerar principalmente na escolha do controle é como o posicionamento de cada um funciona. Desafio
  • 25. Controles de UI Controles são objetos individuais ou compostos que possibilitam uma relação iterativa entre si e com o usuário • Ex.: Button, CheckBox, ListBox, TextBox, etc
  • 26. Controles de Texto Apresentam uma string de texto • Texto simples somente de leitura TextBlock • Caixa de entrada de texto • Suporta linha simples ou múltiplas linhas TextBox • Caixa de entrada de texto mascarada PasswordBox • Texto com formatação rica RichTextBlock e RichEditBox
  • 27. Controles de Texto <TextBlock Margin="10" Text="TextBlock" /> <TextBlock Margin="10"> <Run FontFamily="Arial" FontSize="20">TextBlock</Run> <LineBreak /> <Run FontFamily="Verdana" FontWeight="Bold" FontSize="14">using Inlines</Run> </TextBlock> <TextBox Margin="10" HorizontalAlignment="Left" Width="100" Text="Microsoft Innovation Centers are state of the art technology facilities for collaboration on innovative technology and software solutions." FontFamily="Arial" TextWrapping="Wrap" /> <RichTextBlock> <Paragraph> <Bold>Microsoft Innovation Centers (MIC)</Bold> are facilities that provide world class resources and support for students, entrepreneurs and startups. <LineBreak/> </Paragraph> <Paragraph><Bold>MICs</Bold> work broadly across their communities, providing services, solutions and programs that meet the needs of many audiences, including Students, Entrepreneurs, Governments, and Local Industries. </Paragraph> </RichTextBlock>
  • 28. Resource Controls Source – propriedade que atribui o conteúdo do controle como uma URL absoluta ou relativa Ex.: Image, MediaElement, WebView
  • 29. Content Controls Content – propriedade que atribui o conteúdo do controle (qualquer objeto possível de ser renderizado) • Ex: Button, CheckBox, etc Esses tipos de controles aceitam somente um único conteúdo filho Conteúdo é obtido através de ToString() ou OnRender() Importante: mudar o conteúdo de um controle não muda suas características básicas (pense no comportamento de um Button…); para alterar características mais profundas utiliza-se o control template
  • 30. Sintaxe do tipo "Property Element" Content Controls <Button> <Image Source="imagem.jpg“/> </Button> <Button> <Button.Content> <Image Source="imagem.jpg“/> </Button.Content> </Button> <Button>Conteúdo</Button> <Button Content="Conteúdo" />
  • 31. Controles de Botão São controles com ação associada • Dispara eventos de click Button HyperlinkButton • Dispara uma navegação entre páginas <Button>Clique</Button> <Button Content="Clique" /> <HyperlinkButton Content="Clique aqui para mais informações" NavigateUri="https://dev.windows.com/en-us" TargetName="_blank" />
  • 32. Item Controls Items – propriedade que indica a coleção de objetos do tipo de item apropriado para o controle ItemsSource – propriedade que indica uma coleção IEnumerable como fonte de dados Ex.: ListBox (ListBoxItem), ComboBox (ComboBoxItem), FlipView (FlipViewItem), etc
  • 33. Item Controls <ComboBox Width="400" Height="50"> <ComboBox.Items> <ComboBoxItem Content="Item 1" /> <ComboBoxItem Content="Item 2" /> <ComboBoxItem Content="Item 3" /> </ComboBox.Items> </ComboBox> <ComboBox x:Name="UriBox1" Width="400" Height="50" /> ObservableCollection<Uri> Uris = new ObservableCollection<Uri>(); Uris.Add(new Uri("https://dev.windowsphone.com/dashboard")); Uris.Add(new Uri("https://appdev.microsoft.com/storeportals/")); Uris.Add(new Uri("http://dev.windows.com/")); UriBox1.ItemsSource = Uris;
  • 34. Elementos Gráficos • 2D e 3D • Aceleração de hardware • Preferência por desenhos vetoriais Características Categorias de elementos • Figuras (Shapes) • Pincéis (Brushes) • Transformações (Transforms)
  • 35. Brushes • SolidColorBrush: diferentes preenchimentos para cores sólidas • LinearGradientBrush: preenchimento para gradientes lineares • ImageBrush: preenchimento para imagens • WebViewBrush: usado para processar o conteúdo de um controle WebView como uma solução para o fato de que o próprio WebView é sempre prestados em cima de outros controles. Responsável pela formatação dos controles
  • 36. SolidColorBrush <StackPanel> <Rectangle Width="100" Height="100" Fill="Red" /> <Rectangle Width="100" Height="100" Fill="#FFFF0000" /> </StackPanel> <Rectangle Width="200" Height="150"> <Rectangle.Fill> <SolidColorBrush Color="Blue" Opacity="0.5" /> </Rectangle.Fill> </Rectangle>
  • 37. LinearGradientBrush <Rectangle Width="400" Height="200"> <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="Yellow" Offset="0.0" /> <GradientStop Color="Red" Offset="0.25" /> <GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color=”Green" Offset="1.0" /> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> <Rectangle Width="400" Height="200"> <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="Yellow” /> <GradientStop Color="Red" Offset=”1" /> </LinearGradientBrush> </Rectangle.Fill> </Rectangle>
  • 39. Figuras • Linhas, elipses, retângulos e polígonos Representam elementos primitivos • Shape, Line, Ellipse, Rectangle, Polyline, Polygon, Path Principais classes • Possuem o mesmo comportamento dos outros elementos! Derivam de FrameworkElement Mais utilizadas dentro de Canvas
  • 40. Figuras <Ellipse Fill="Yellow" Stroke="Blue" Height="100" Width="100" Margin="5" HorizontalAlignment="Left"></Ellipse> <Rectangle Fill="Yellow" Stroke="Blue" Height="50" Width="100" Margin="5" HorizontalAlignment="Left"></Rectangle> <Line Stroke="Blue" X1="0" Y1="0" X2="10" Y2="100" StrokeThickness="5"> </Line> <Polyline Stroke="Blue" StrokeThickness="5" Points="10,150 30,140 50,160 70,130 90,170 110,120 130,180 150,110 170,190 190,100 210,240"></Polyline> <Polygon Stroke="Blue" StrokeThickness="1" Fill="Yellow" Canvas.Left="10" Canvas.Top="175" FillRule="Nonzero" Points="15,200 68,70 110,200 0,125 135,125"></Polygon>
  • 41. Tranformações • TranslateTransform • RotateTranform • ScaleTransform • SkewTransform Diversas classes que cuidam dessas transformações • TransformGroup (representa uma transformação composta por outras transformações) • MatrixTransform (cria uma matriz para transformação, que consiste em uma transformação linear seguida de uma translação) Classes adicionais
  • 42. Rotate Transform Rotaciona o elemento por um ângulo especificado <TextBlock Text="student to business" Foreground="White" FontSize="20"> <TextBlock.RenderTransform> <RotateTransform Angle="90" /> </TextBlock.RenderTransform> </TextBlock> Ex.: texto rotacionado num ângulo de 90º no sentido horário.
  • 43. Scale Transform Altera a escala de um objeto 2-D através das coordenadas “ScaleX” e “ScaleY” <TextBlock FontSize="32" FontWeight="Bold" Foreground="White" Text="student to business"> <TextBlock.RenderTransform> <ScaleTransform ScaleX="4" ScaleY="2" /> </TextBlock.RenderTransform> </TextBlock>
  • 44. Translate Transform Move um objeto de um ponto de coordenadas (x1,y1) para outro ponto de coordenadas (x2,y2) <TextBlock Foreground="White" Text="student to business” FontSize="40" FontWeight="Bold"> <TextBlock.RenderTransform> <TranslateTransform X="9" Y="6" /> </TextBlock.RenderTransform> </TextBlock> Ex.: texto movido para o ponto (9,6) a partir de seu ponto inicial (0,0). Ponto Origem (0,0) (9,6)
  • 45. Skew Transform Coloca um objeto em perspectiva através de ângulos especificados, “AngleX” e “AngleY”. Cria uma ilusão 3-D nos objetos 2-D <TextBlock FontSize="32" FontWeight="Bold" Foreground="White" Text="student to business"> <TextBlock.RenderTransform> <SkewTransform AngleX="20" AngleY="10" /> </TextBlock.RenderTransform> </TextBlock> Ex.: texto em perspectiva num ângulo de 20º no eixo X e 10º no ângulo Y.
  • 47. Eventos Os conceitos de eventos em Windows Runtime são semelhantes ao modelo de evento nas linguagens de programação mais usadas Define-se um método para tratar o evento quando este mesmo for disparado
  • 48. Manipuladores de Eventos Para objetos que são elementos da interface do usuário e foram declarados em XAML, o código de manipulador de eventos é definido na classe parcial que opera como o code-behind de uma página XAML. Manipuladores de eventos são métodos que você escreve como parte da classe parcial associada ao XAML <Button x:Name="btName” FontSize="40 Click="btName_Click"> Microsoft Innovation Center </Button> private void btName_Click(object sender, RoutedEventArgs e) { Button bt = (Button)sender; if (bt != null) { bt.Foreground = new SolidColorBrush(Colors.SpringGreen); } }
  • 49. Manipuladores de Eventos - Adicionando XAML não é a única forma de atribui um manipulador de eventos a um objeto Você registra o manipulador fazendo referência ao nome do método manipulador de eventos no lado direito do operador btName.Click += btName_Click; btName.Click += new RoutedEventHandler(btName_Click); Obs.: Se você está usando código para adicionar manipuladores de eventos a objetos que aparecem na interface do usuário em tempo de execução, uma prática comum é adicionar esses manipuladores em resposta a um evento de ciclo de vida do objeto ou de retorno de chamada – como, por exemplo, Loaded ou OnApplyTemplate, de maneira que os manipuladores de eventos no objeto relevante estejam prontos para eventos iniciados pelo usuário no tempo de execução
  • 50. Vinculação de Dados (Data Binding)
  • 51. Vinculação de Dados Vinculação (data binding) é o processo de estabelecer uma conexão entre valores de propriedades de objetos • Usualmente a fonte é um elemento de dados (do ViewModel) e o alvo é um componente de interface com o usuário (view) • Vinculação também acontece entre dois elementos do XAML (esse é o tipo mais simples de vinculação) • Baseado em um padrão Observer para a notificação de alteração dos dados vinculados
  • 52. Vinculação de Dados - Funcionamento Vinculação (data binding) é o processo de estabelecer uma conexão entre valores de propriedades de objetos • Target Object - Objeto Alvo os componentes do XAML (ex. TextBox, Listbox, etc) • Dependency Property - A propriedade do objeto que vai receber o dado (ex. Text, Source, etc) • Source Object - fonte dos dados (ex. um objeto Pessoa) • Property - Um caminho para o valor no Source Object(ex. propriedade Nome) • Value Converter - Conversor de valores entre as propriedades caso necessário (ex. Data de Nascimento) Source Object Property Value Converter Binding Target Object Dependency Property
  • 53. Vinculação de Dados <TextBox x:Name="txtData" Text="{Binding DayOfWeek, Mode=OneWay}" /> <TextBox x:Name="txtData"> <TextBox.Text> <Binding Path="DayOfWeek" Mode="OneWay" /> </TextBox.Text> </TextBox> DateTime currentTime = DateTime.Now; txtData.DataContext = currentTime; Binding Mode Source Object - currentTime Property - DayOfWeek Target Object - txtData Dependency Property - Text
  • 54. Vinculação de Dados Objeto Binding configura a vinculação • Para especificar a fonte ○ ElementName – nome do elemento fonte ○ Source – nome do objeto (que não é elemento) fonte ◘ Usualmente utiliza-se DataContext no elemento alvo ○ RelativeSource – caminho do elemento na árvore visual relativo ao objeto alvo ○ Path – caminho para a propriedade fonte • Para especificar o modo de funcionamento ○ Mode – especifica a direção do fluxo de dados ○ Converter – especifica um objeto de conversão de dados Principais propriedades
  • 55. Vinculação de Dados Propriedade Mode do objeto Binding permite configurar a direção do fluxo de dados • OneWay – origem automaticamente atualiza o destino, mas atualizações do destino não se propagam para a origem; modelo padrão • TwoWay – qualquer alteração na origem ou destino é propagada para o outro • OneTime – origem inicializa o valor do destino quando a vinculação é criada, mas não propaga alterações subsequentes
  • 56. Vinculação de Dados Padrão Observer para notificação de alterações caso a fonte seja um objeto de negócio de uma aplicação Objetos devem implementar serviços de notificação, como a interface INotifyPropertyChanged ou INotifyCollectionChanged Para coleções utiliza-se usualmente ObservableCollection<T> que já implementa as propriedades necessárias
  • 57. Vinculação de Dados Como devemos utilizar a propriedade Mode do objeto Binding de forma a facilitar o desenvolvimento e minimizar a quantidade de códigos para determinadas ações?
  • 58. Vinculação de Dados <StackPanel Grid.Row="1" Width="400" VerticalAlignment="Center"> <StackPanel Grid.Row="1" Width="400" VerticalAlignment="Center" DataContext="{Binding Pessoa}"> <TextBox PlaceholderText="Nome" Margin="10" Text="{Binding Nome, Mode=TwoWay}"></TextBox> <DatePicker HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10” Date="{Binding DataNascimento, Mode=TwoWay}"/> </StackPanel> <StackPanel Margin="10" DataContext="{Binding Pessoa}"> <TextBlock FontSize="30" Foreground="White" FontWeight="Normal" HorizontalAlignment="Left" Margin="5” Text="{Binding Nome}"></TextBlock> <TextBlock FontSize="25" Foreground="White" FontWeight="Normal" HorizontalAlignment="Left" Margin="5” Text="{Binding DataNascimento,Converter={StaticResource DataConverter}, ConverterParameter='{day.integer(2)}/{month.integer(2)}/{year.full}'}"> </TextBlock> </StackPanel> </StackPanel>
  • 59. Vinculação de Dados A classe a ser informada que houve alguma alteração nos dados deve ser montada do formato ao lado, implementando a interface INotifyPropertyChanged e no setter de cada propriedade chamar a notificação pelo nome. public class Pessoa : INotifyPropertyChanged { private string _nome; public string Nome { get { return _nome; } set { _nome = value; NotifyPropertyChanged("Nome");} } private DateTimeOffset _dataNascimento; public DateTimeOffset DataNascimento { get { return _dataNascimento; } set { _dataNascimento = value; NotifyPropertyChanged("DataNascimento");} } public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }