WPF - Revisando conceitos bem básicos


Quando você decide trabalhar com a WPF existem muitos conceitos básicos que você precisa conhecer para saber o que esta acontecendo por "trás dos panos".

A WPF (Windows Presentantion Fundation)  é uma tecnologia que se propõe ser uma alternativa ao modelo Windows Forms, e, em se tratando de recursos a WPF vai além.

Para criar aplicações WPF você pode usar o Visual Studio 2010 , o Visual Basic 2010 Express Edition , o Visual C# 2010 Express Edition e o SharpDevelop 4.0.

Já deu para perceber que você pode criar aplicações WPF usando tanto a linguagem VB .NET como a linguagem C# e neste artigo eu vou usar a primeira opção.

Criando uma aplicação WPF no VB 2010 Express

Abra o Visual Basic 2010 Express Edition e no menu File selecione New Project;

Na janela New Project selecione o modelo WPF Application, informe o nome Wpf_Exemplo e clique em OK;

Será criada uma Solução contendo os arquivos mostrados na figura abaixo:

Será aberto dois painéis:

  1. No painel inferior será exibido o descritor XAML exibindo o código XAML;
  2. No painel superior será exibido o resultado gráfico deste código renderizado;

Você pode selecionar os painéis clicando nas abas Design e XAML. Para alternar a ordem dos painéis clique no ícone ;

Abra o arquivo MainWindow.xaml.vb e no evento Initialized de Window inclua o código mostrado a seguir:

Pressione F5 para compilar e rodar a aplicação. Deverá ser apresentada a janela exibindo o título e conteúdo conforme a figura a seguir:

Obs: No SharpDevelop os dois arquivos criados na solução são: Window1.xaml(Window1.xaml.vb) e App.xaml (App.xaml.vb)

Vamos dar uma olhada no que foi produzido para nós pelo VB 2010 Express quando usamos o modelo WPF Application para criar a nossa aplicação WPF.

O template WPF Application produz o programa chamado Wpf_Exemplo que é constituído de duas classes:

Cada uma dessas classes é implementada como dois arquivos de código na solução:

Percebeu que temos duas linguagens envolvidas em uma aplicação WPF ?

Sim: XAML e VB .NET (ou XAML e C#).

Mas o que vem a ser XAML ?

XAML é uma linguagem de marcação baseada na linguagem XML para especificação e definição de características de classes.

XAML é utilizado principalmente para a especificação de aspectos estáticos e visual da interface do usuário através da definição propriedades de objetos da classe

Por exemplo, você pode usar XAML para colocar um botão em uma janela e definir todas as suas características visuais enquanto podemos usar a linguagem VB .NET (ou C#) para escrever o manipulador de mensagem que é chamado quando o botão for clicado.

Os dois arquivos XAML gerados por padrão quando você cria uma aplicação WPF em uma das ferramentas citadas são:

MainWindow.xaml
Application.xaml

Se observarmos o código dos arquivos XAML podemos notar tags e nós onde acabamos tendo uma estrutura em forma de uma árvore onde cada nó contém outros nós.

Para mostrar essa características vamos abrir o arquivo MainWindow.xaml e incluir a partir da ToolBox um controle StackPanel, um controle TextBlock e um controle Button conforme mostra a figura a seguir:

A WPF trabalha com duas árvores :

  1. A árvore lógica;
  2. A árvore visual;
Árvore Lógica Árvore Visual

O processo de compilação WPF

Em uma aplicação WPF, como temos duas linguagens , a compilação é um processo feito em duas etapas.

  1. Na primeira etapa o compilador toma cada arquivo XAML e o traduz em dois arquivos

O arquivo MainWindow.g.vb é um arquivo VB .NET que contém o código para carregar o XAML e conectar diferentes componentes e manipuladores em tempo de execução. Você pode até abrir esse arquivo, e também pode modificá-lo sem problemas, porque ele é gerado pelo compilador e substituirá qualquer alterações feitas.

O arquivo MainWindow.baml onde baml significa Binary Application Markup Language. Esta versão do código XAML é indexado para torná-lo mais eficiente no carregamento e análise em tempo de execução e não é um arquivo legível.

  1. Na segunda etapa o compilador toma os arquivos VB .NET e os arquivos BAML e produz o arquivo executável:

O compilador pega os arquivos de código-fonte e produz um conjunto de arquivos intermediários e produz então o arquivo executável a partir dos arquivos intermediários.

Abaixo temos a figura que mostra a estrutura de diretórios produzidos pelo Visual Studio quando ele gera um projeto WPF Application. Esta estrutura apresenta a saída após a compilação, quando o projeto está em configuração de Debug(depuração). Os quatro arquivos de código-fonte estão na pasta do projeto, juntamente com duas outras pastas.

- A pasta bin, contém uma subpasta que contém o executável. A subpasta é chamado Debug ou Release, consoante você está em modo de depuração ou modo de liberação

- A pasta obj contém uma subpasta contendo arquivos intermediários gerados pelo compilador

- O arquivo App.baml aparecerá somente se você adicionar elementos ao arquivo fonte Application.xaml caso contrário ele não será gerado.

Como os arquivos são utilizados

Você já sabe que as classes Application e Window possuem cada uma um arquivo fonte VB .NET(ou C#) um arquivo gerado VB .NET(ou C#) e um arquivo XAML, o qual é traduzido em um arquivo BAML.

Você sabe as funções dos arquivos de origem, vejamos a seguir quais os papéis dos arquivos gerados:

- Os arquivos BAML gerados são uma tradução condensada e mais eficiente do XAML arquivos. Elas são otimizadas para carregamento mais rápido e interpretação em tempo de execução, uma vez que, em tempo de execução, o programa carrega esses arquivos na memória;

- A arquivo gerado VB .NET tem uma extensão .g.vb. Este arquivo contém o código para carregar os BAML a partir do executável e conectá-lo para criar a interface do usuário. O g na extensão representa gerado;

- O compilador pega o arquivo fonte VB .NET e o arquivo gerado VB .NET, e usa as classes parciais em cada um para criar a classe completa;

Quando o programa estiver criando um objeto da classe Window, as seguintes tarefas são executadas:
1. O construtor Window é chamado.
2. O construtor Window chama o método da classe InitializeComponent, que carrega a árvore de interface do usuário e conecta todas as partes e manipuladores de eventos.

O construtor para a classe Window chama o método InitializeComponent, que carrega o Window BAML do assembly e constrói a árvore de elementos da interface do usuário.

Dessa forma espero que você tenha uma visão mais clara sobre o processo de criação de uma aplicação WPF, pelo menos em seu nível mais básico.

Eu sei é apenas WPF, mas eu gosto...

"Vim lançar fogo na terra, e que mais quero, se já está acesso ? ." (Lucas 12:49)

Referências:

José Carlos Macoratti