Pular para o conteúdo principal

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.

Postagens mais visitadas deste blog

Como gerar scripts para exportar dados no SQL Server 2008

Uma das tarefas mais comuns no trabalho com desenvolvimento de software que consome dados em bancos como o SQL Server 2008 é a necessidade de em algum momento precisarmos exportar os dados de um banco para outro. Quer seja para realizar testes ou fazer simulações existem várias maneiras de se fazer isto. Neste post eu quero demonstrar um recurso do SQL Server Management Studio (SSMS) que permite realizar esta tarefa rapidamente.Para os que estão acostumados a usar esta ferramenta, já devem saber que é possível gerar scripts para o schema e também transferir os dados entre dois bancos distintos. Isto pode ser feito se o SSMS puder conectar-se com as duas bases, de origem e destino. No exemplo que vou dar, o objetivo é gerar o script apenas para uma tabela do banco de dados de exemplo da Microsoft – Northwind.1. Iniciando o assistenteO assistente deve ser iniciado clicando com o botão direito do mouse sobre o banco onde se encontra a tabela a qual iremos gerar o script. Deve se clicar n…

Pivot dinâmico com SQL Server

Passo a passo para usar pivoteamento dinâmicoOs bancos de dados bem configurados e definidos armazenam os dados de forma a otimizar o acesso, evitando duplicidade e garantindo a integridade. Porém, em muitas situações isto pode dificultar a apresentação de forma adequada sendo necessário preparar os dados usando vários recursos entre os quais, fazer o pivoteamento.Se você não precisou ainda usar ou não sabe o que é consiste em transformar cada linha de uma determinada coluna em colunas de uma nova consulta.Assim, considere uma tabela que armazene as notas bimestrais de um boletim. Uma possível estrutura para esta tabela seria algo assim:ColunaTipo de dado/TamanhoDisciplinanvarchar(50)BimestreIntNotanumeric(5,2)Uma consulta select nesta tabela com alguns dados traria um resultado parecido com o abaixo:Porém pode ser que para apresentar estes dados em um relatório seja necessário transformar cada bimestre em uma coluna e agrupar as notas nestas colunas para que fique dessa forma:Isto po…

Desabilitando o auto commit no SSMS (SQL Server Management Studio)

(Ou, como prevenir desastres e manter o emprego a salvo…)Neste post vai uma pequena mas tremendamente útil dica para desabilitar o auto commit da aplicação SQL Server Management Studio (SSMS) que é usada por dez entre dez usuários do banco de dados SQL Server para fazer consultas, alterações e executar scripts no banco de dados. (Preferências à parte, realmente muita gente usa),A primeira e mais importante notícia é que, diferentemente da ferramenta do Oracle, este editor de scripts do SQL Server vem com o recurso de auto commit ativado por padrão, assim, qualquer instrução DML (alteração dos dados com update, insert e delete) ou DDL (alteração no banco como create, drop, alter, etc.) será imediatamente enviada ao banco e persistida.Isto pode ser altamente crítico pois se estiver executando as instruções em um banco de dados de produção não haverá muitas formas de desfazer se é que haverá.Inicialmente, pode se evitar muitos acidades executando estas instruções dentro de um bloco BEGIN…