Respondendo a Eventos
Um dos pontos importantes de qualquer linguagem é a capacidade desta permitir escrever código para responder a eventos.
No C# os eventos são escritos para elementos especiais das classes, os delegates que funcionam como ponteiros para funções.
Um uso típico é o responder a um clique em um controle Buttom ou verificar se em um controle de texto, o usuário pressionou uma tecla específica. Entretanto, há muito mais por trás de eventos. É possível inspecionar se houve mudança no valor de alguma propriedade de um determinado componente, por exemplo.
No XAML a maneira de responder a evento é simples bastando escrever o nome do evento e o método que será executado, como no exemplo abaixo:
EventName=”EventHandlerMethodName”
Para um controle do tipo Button o código ficaria parecido com o seguinte:<Button … Click=”btnEnviar_Click”>
private void btnEnviar_Click(object sender, RoutedEventArgs e)
{
…
}
Um ponto que pode causar algum impacto em sua aplicação é a forma como o Framework .NET faz a configuração dos controles. Primeiramente a propriedade Name é configurada. Na sequência, são anexados os EventHandlers e por fim, os valores são passados para as propriedades. Independentemente da sequência que foram definidos no seu código XAML. Logo, se você fizer um EventHandler respondendo a mudança em alguma propriedade, este será sempre disparado, mesmo que você esteja alterando a propriedade no próprio código XAML.
Considere o seguinte código:
<Window x:Class="WPFEstudo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox x:Name="txtExemplo"
TextChanged="OnTextChanged"
Text="Estou mudando a propriedade." />
</Grid>
</Window>
No exemplo, configurei o evento "TextChanged" do controle TextBox. Abaixo segue o código em C# respondendo ao evento.
private void OnTextChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("A propriedade do TextBox foi configurada.");
}
Assim, este código é executado já no momento em que o programa é carregado.
XAML: Editar ou não editar?
Nos exemplos que estou colocando e em muitos outros que você verá aqui e em outros lugares é muito comum perceber uma grande quantidade de código XAML sendo passado. Talvez você tenha dúvidas sobre se esta é ou não a melhor maneira de trabalhar.
A resposta é: depende.
Em um projeto grande, certamente você irá preferir usar os editores visuais. O próprio Visual Studio possui um que não deixa a desejar. Existem outros como o Microsoft Expression Blend e o KXAML.
Tarefas como definição de animações e formatações mais complexas precisam dos editores gráficos. Porém, para fazer ajustes finos da interface e configurações mais minunciosas, será inevitável que você edite o código manualmente.
Por outro lado, é comum que em alguns projetos a interface fique à cargo de um designer gráfico, que fará da melhor maneira possível, restando ao programador apenas escrever o código necessário à execução do programa.
Referenciando Classes do Framework .NET NO XAML
Poderão surgir situações onde as classes do Framework .NET precisem ser referenciadas no código XAML. Para isso é preciso fazer uma referência ao namespace em que a mesma está contida seguindo o padrão abaixo:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Neste caso será possível usar as classes contidas no namespace System como no código abaixo, que preenche um controle ListBox com a data atual.
<Window x:Class="WPFEstudo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox>
<ListBoxItem>
<sys:DateTime>12/04/2011</sys:DateTime>
</ListBoxItem>
<ListBoxItem>
<sys:DateTime>12/04/2011</sys:DateTime>
</ListBoxItem>
<ListBoxItem>
<sys:DateTime>12/04/2011</sys:DateTime>
</ListBoxItem>
</ListBox>
</Grid>
</Window>
Observe o ponto principal da marcação, o prefixo “sys” que foi declarado no namespace que é seguido pela declaração da classe.
Com mais estes elementos espero estar contribuindo para os conhecimentos detalhados da linguagem XAML para quem estiver começando nesta área. Até a próxima.