Iniciando com WPF e XAML – Mais elementos importantes

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”>


É importante lembrar que é preciso conhecer os parâmetros que o método do EventHandler precisa ter para poder ser executado. O código C# para o evento acima ficaria da seguinte forma:


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.