Você está na página 1de 25

[Mo na Massa Boa Ideia]

Windows Forms x WPF


Comparao para saber qual delas a
melhor para seu software



Celular: (16) 9235-5171
E-mail: diegooferreira@gmail.com

Diego Eduardo Ferreira (diegooferreira@gmail.com)
Cursando processamento de dados na FATEC, trabalha com programao desde 2007 com asp.net,
Windows Forms e atualmente com WPF.

Do que trata o artigo
Apresentao das principais caractersticas das tecnologias Windows Forms e Windows Presentation
Foudation. Exposio da comparao entre as mesmas, expondo o que semelhante e diferente, as
vantagens e as desvantagens, e o objetivo, mostrar ao leitor casos em que cada tecnologia mais bem
aplicada.
Para que serve
O Windows Forms uma tecnologia madura e possui muitas ferramentas, s que com o passar das
verses do framework, este no sofreu muitas mudanas. Por exemplo, a customizao de controles, por
mais que se mudem as caractersticas, eles sempre possuem a aparncia do padro Windows. O WPF
permite a customizao total dos controles, podendo fugir do padro do sistema operacional. Porm,
para tal, requer um poder de processamento maior do computador.
Em que situao o tema til
Quando chegar o momento de escolher em qual tecnologia utilizar, fundamental conhecer as principais
caractersticas de cada uma das plataformas para a aplicao ficar agradvel tanto para o desenvolvedor
como para o usurio final.

Resumo do DevMan
O Windows Forms foi a primeira soluo da Microsoft para aplicaes desktop. Posteriormente, no .net
framework 3.0, surgiu o Windows Presentation Foundation, o WPF. Dependendo do software a ser
desenvolvido, a escolha errada da tecnologia a ser aplicada pode atrapalhar sua produo. Ento,
necessrio conhecer os pontos fortes e fracos de cada uma das tecnologias para, assim, maximizar o
desenvolvimento do software e atender as necessidades do cliente.

O .net framework, desde a primeira verso, permitiu que os desenvolvedores criassem aplicaes
tanto web como desktop. Na verso web, trouxe o ASP.net, uma verso do asp utilizando as bibliotecas
do framework. Na verso desktop, trouxe o Windows Forms, que lembra as aplicaes desenvolvidos


em IDEs como o Delphi, e tambm trouxe o lanamento do C#, uma nova linguagem derivada do C,
totalmente orientada a objetos, que at hoje disputa um lugar no mercado com o Java.
Nas ultimas verses do .net, especificamente da 3.0 ou superior, a Microsoft trouxe o Windows
Presentation Foundation, o WPF, uma nova maneira de desenvolver aplicaes, tanto para desktop,
como para web. A sua interface baseada em uma linguagem denominada XAML, um tipo de XML,
que faz com que a aplicao desenvolvida possa ser executada tanto no navegador como no Windows.
Posteriormente, ser abordado profundamente sobre este assunto.
Atualmente, os clientes pedem softwares de qualquer espcie, desde simples calculadoras at
programas que executam complexas regras de negcio. Se o software ser desktop e ser desenvolvido
com o .net framework, qual a melhor opo para criar a aplicao? Windows Forms ou WPF? Em
seguida, surgem vrias dvidas, tais como: com qual das tecnologias ser suprida a necessidade do
cliente e da melhor forma? Com qual das tecnologias o software ser produzido mais rpido? Se for
trabalhar em equipe, qual conceito permite melhor o trabalho em conjunto?
O objetivo deste artigo destacar os pontos fortes e fracos do Windows Forms e do WPF,
apresentando um caso onde a aplicao favorvel utilizao do primeiro e outro caso onde a
aplicao ser mais bem elaborada com a utilizao do segundo.
Um pouco sobre o Windows Forms
O Windows Forms existe no .net framework desde a primeira verso. Para a verso desktop, foi
a nica soluo at a verso 3.0, quando surgiu o WPF. Com o objetivo de reproduzir aplicaes
Windows, o Windows Forms lembra aplicaes desenvolvidas em IDEs como Delphi, que tambm
utilizam APIs do sistema operacional.
Uma API (Application Programming Interface, ou em portugus, Interface de Programao de
Aplicativos) so cdigos que esto no sistema operacional que so utilizados para criar uma aparncia
visual dos elementos do padro de interface do usurio, tais como botes, caixas de texto, caixas de
seleo e assim por diante. Como resultado, esses componentes so essencialmente no customizveis,
muito pelo contrario, so bem parecidos com o do sistema operacional em questo.
Na questo da customizao, os controles, que so os componentes de entrada e sada utilizados
pelo Windows Forms, possuem caractersticas pouco customizveis, permite apenas cor, tamanho de
fonte, cor de fonte, estilo da fonte entre outras. Por exemplo, se o desenvolvedor precisar deixar um
boto com o formato diferente vai precisar fazer ou procurar uma imagem do boto que quiser, e aplicar
ao boto na propriedade Image. No uma opo muito vivel, j que imagens consomem bastante
memria para renderizar. A figura 1 ilustra um formulrio com um campo desenvolvido em Windows
Forms.




Figura 1. Ilustrao de um formulrio em Windows Forms

Todo formulrio, quando criado peloVisual Studio, possui 3 arquivos: um com a extenso .cs, outro com
a extenso .Designer.cs e ainda outro com a extenso .resx. O primeiro a classe que define o
comportamento do formulrio, ou seja, nesta classe so programados os eventos do prprio formulrio e
dos controles contidos nele. O segundo, com a extenso .Designer, a classe que contem os
componentes do formulrio: os botes, as caixas de textos, os labels entre outros. Alm de definir as
instancias dos controles, armazena o valor das propriedades atribudas em modo design, por exemplo, o
texto que estar no label, a posio absoluta na tela, o tamanho, entre outras. Possui tambm mtodos de
criao e remoo do formulrio na memria, com os mtodos InitializeComponent e Dispose,
respectivamente. O primeiro e o segundo arquivo contem classes partial, ou seja, so dois arquivos
que contem o mesmo nome de classe, e elas se completam se transformando em uma classe s quando
compiladas. O terceiro arquivo so os resources do formulrio, ou seja, um arquivo de recurso que
contem informaes que podem ser utilizados por ele, como strings, imagens, cones, entre outras
opes. A listagem 1 mostra o cdigo gerado pelo prprio framework para criar o formulrio, ou seja, a
classe com extenso .Designer.

Listagem 1: Cdigo gerado para criao do formulrio da Figura 1
namespace Listagem1
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed;
otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{


components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(13, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(84, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Nome do cliente";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(16, 30);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(256, 20);
this.textBox1.TabIndex = 1;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion

private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1;
}
}

Nota: Em alguns artigos ou tutoriais que esto na internet, o autor, quando passa o cdigo do que
est ensinando, joga os controles (classe .Designer.cs) e a implementao de eventos (classe .cs) tudo
em uma nica classe. Isso possvel, j que as classes .Designer e .cs so partial. Ento, o cdigo
funciona e somente o no ficar no padro que o framework gera.


Para mudar as propriedades dos controles, clique sobre o controle e pressione F4 ou passe o
mouse sobre a aba Properties do Visual Studio, como indica a figura 2.


Figura 2. Aba Properties mostrando as propriedades da caixa de texto

bastante simples montar um formulrio com Windows Forms: basta passar o mouse sobre a
aba Toolbox e clicar sobre o controle desejado e arrastar para o formulrio, como mostra a figura 3.



Figura 3. Inserindo um controle no formulrio em Windows Forms

O principal namespace das aplicaes Windows Forms o System.Windows.Forms. Dentro
deste namespace, alm dos controles do formulrio, esto as classes responsveis por desenhar o mesmo
na tela do computador.
O que o Windows Presentation Foundation
Segundo o autor Moroney, o Windows Presentation Foundation um subsistema de exibio
grfica para Windows. Resumidamente, o WPF combina o melhor do antigo mundo de desenvolvimento
Windows com inovaes para construes modernas e interfaces de usurio graficamente ricas.
Sua origem se d na verso 3.0 do .NET framework 3.0 e constantemente vem sofrendo
modificaes e incorporados novos complementos com novidades para os desenvolvedores. Os recursos
esto ficando cada vez mais inovadores.
Subjacentes a novas funcionalidades, o WPF uma nova e poderosa infra-estrutura baseada em
DirectX. O DirectX uma API multimdia que oferece uma interface padro para interagir com
elementos grficos, placas de som e dispositivos de entrada, entre outros.
Isto significa que possvel criar efeitos grficos ricos sem sobrecarregar a desempenho, problema
corriqueiro com a utilizao de Windows Forms. Na verdade, obtm-se recursos avanados, tais como
suporte para arquivos de vdeo e contedo 3D. Usando estes recursos, possvel criar interfaces de
usurio estilizadas e efeitos visuais que no seriam possveis utilizando Windows Forms.
O WPF inclui controles padro para se familiarizar com os desenhos de texto, bordas e
preenchimento de fundo. Como resultado, a tecnologia pode proporcionar caractersticas mais poderosas
que permitem alterar o modo como o contedo da tela exibido. possvel reescrever controles
comuns, como botes ou caixas de texto, muitas vezes sem escrever qualquer cdigo, e obter um
controle bem mais atraente e que chame a ateno do usurio.
Alm disso, permitido usar transformaes de objetos para girar, esticar e deformar alguma coisa
na interface de usurio. E como o ncleo WPF renderiza o contedo de uma janela como parte de uma
nica operao, pode-se manipular ilimitadas camadas de sobreposio de controles, mesmo que estes


controles sejam irregularmente desenhados e parcialmente transparentes. A figura 4 mostra um simples
formulrio feito em WPF.

Figura 4. Formulrio simples desenvolvido em WPF

Aparentemente, o formulrio desenvolvido em WPF pior na questo visual do que o formulrio
feito em Windows Forms. O que acontece que a window, ou seja, o formulrio WPF, quando criada,
vem com uma aparncia padro, no muito atraente. Porm, com leves modificaes, como por
exemplo, um gradiente no fundo da window, cor para a fonte do label e bordas arredondadas para a
caixa de texto, pode se obter um formulrio muito melhor, como mostra a figura 5.


Figura 5. Window com a aparncia padro modificada.

Os formulrios em WPF so desenhados a partir de um XAML, abreviao para Extensible
Application Markup Language e pronunciado zammel. Embora o XAML seja uma tecnologia que
pode ser aplicada a muitos problemas de domnios diferentes, o seu papel principal construir interfaces
de usurio com WPF. A listagem 2 mostra o documento XAML do formulrio da forma simples, sem
estilizao.
Listagem 2: Window sem estilizao
<Window x:Class="Listagem2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">


<StackPanel Margin="6" Orientation="Vertical">
<Label Content="Nome do cliente" />
<TextBox Width="250" Height="20" HorizontalAlignment="Left" />
</StackPanel>
</Window>

Em outras palavras, documentos XAML pode definir a disposio dos painis, botes e controles
que compem as janelas em uma aplicao WPF, como tambm pode definir estilos para os mesmos.
Estes estilos so semelhantes ao CSS (Cascade Style Sheet) da web.
muito til a utilizao do recurso de estilizao, pois ao invs de mudar cada propriedade dos
controles para aplicar alguma caracterstica, somente necessrio mudar o estilo definido para o
controle e ele automaticamente se aplicar.
A listagem 3 mostra a window simples, porm, com aplicao de estilos nela mesma e nos
controles contidos nela. importante destacar que uma boa prtica na utilizao dos estilos mante-los
no nvel mais alto possvel, ou seja, nunca dentro do prprio controle, mas sim na window ou ainda se
possvel, em um arquivo denominado Resource Dictionary, que tambm um arquivo XAML e trabalha
arquivo CSS da web, centralizando os estilos dos controles em um nico lugar.

Listagem 3: Window e seus controles com estilizao
<Window x:Class="Listagem2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<!--Fundo da janela-->
<Window.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFEDF0F9" Offset="0.5"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Window.Background>
<!--Local onde so definidos os estilos-->
<Window.Resources>
<!--Estilo para o controle TextBox-->
<Style TargetType="{x:Type TextBox}">
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
<Setter Property="Margin" Value="3,0,5,0"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="CharacterCasing" Value="Upper"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="Height" Value="21"/>
<Setter Property="Foreground" Value="#FF001362"/>
<Setter Property="UndoLimit" Value="1"/>
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Border x:Name="Border" Opacity="1"
Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding
BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="2,2,2,2">
<Grid>
<Border BorderThickness="1"
CornerRadius="1,1,1,1">


<Border.BorderBrush>
<SolidColorBrush Color="Transparent"
x:Name="MouseOverColor"/>
</Border.BorderBrush>
<ScrollViewer Margin="0"
x:Name="PART_ContentHost" Background="{TemplateBinding Background}"/>
</Border>
</Grid>
</Border>
<Border x:Name="HoverBorder" Opacity="0"
BorderBrush="#FF749CD3" BorderThickness="2,2,2,2" CornerRadius="2,2,2,2"/>
<Border x:Name="DisabledVisualElement"
IsHitTestVisible="False" Opacity="0" Background="#FFFFFFFF" BorderBrush="#A5F7F7F7"
BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2,2,2,2"/>
<Border x:Name="FocusVisualElement"
IsHitTestVisible="False" Opacity="0" BorderBrush="#FF749CD3"
BorderThickness="2.1,2.1,2.1,2.1" CornerRadius="0.2,0.2,0.2,0.2"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="#FF749CD3"/>
<Setter Property="Background" Value="White" />
</Style>
<!--Estilo para o controle Label-->
<Style TargetType="Label">
<Setter Property="Foreground" Value="#FF001362" />
<Setter Property="FontFamily" Value="Verdana" />
</Style>
</Window.Resources>

<!--Contedo da janela-->
<StackPanel Margin="6" Orientation="Vertical">
<Label Content="Nome do cliente" />
<TextBox Width="250" Height="20" HorizontalAlignment="Left" />
</StackPanel>
</Window>

pouco provvel que se escreva XAML na mo. Ao invs disso, pode-se usar uma ferramenta que
gere o XAML. Para um design grfico, esta ferramenta pode ser o programa Microsoft Expression
Blend, mas para um desenvolvedor, pode-se usar o prprio Visual Studio. Ambas as ferramentas
trabalham tranquilamente com o XAML, podendo-se criar uma interface de usurio bsica com o Visual
Studio e ento dar acabamentos com grficos personalizados no Expression Blend.
Na verdade, esta capacidade de integrar o fluxo de trabalho entre desenvolvedores e designers
uma das principais razes que fez a Microsoft criar o XAML. Tanto o Visual Studio como no
Expression Blend, a construo do formulrio pode ser do modo arrastar e soltar, como no Windows
Forms.
Quando uma Window criada pelo Visual Studio, so gerados 2 arquivos: um com a extenso
xaml e outro com a extenso .xaml.cs. O primeiro o contedo visual da interface, sendo somente texto
XAML. J o segundo, o arquivo que controla o comportamento dos controles da tela, semelhante
classe .cs do Windows Forms.
Para se alterar as propriedades dos controles numa aplicao WPF e adicionar controles aos
formulrios, o mesmo caminho do Windows Forms.
O namespace principal do WPF o System.Windows. Alm dos controles contidos dentro deste
namespace, contm classes que auxiliam nas animaes e efeitos.


O WPF no bom somente visual, melhora tambm a manipulao dos dados, com o avanado Data
Binding. Data Binding o caminho que conecta a interface da aplicao e a parte lgica do sistema, com
a atualizao automtica do valor da sua fonte de dados. Por exemplo, supondo que um TextBox esteja
ligado com a propriedade de alguma classe, e, se o usurio mudar o valor no controle, automaticamente
o valor da propriedade na classe ser alterado, sem necessitar de ficar preenchendo a toda interao.
No Windows Forms existe o Data Binding, porm, no to eficaz e de to fcil uso como no
WPF. Principalmente na questo dos tipos dos dados bem mais complicado de se tratar no WinForms
do que no WPF. A figura 6 ilusta como funciona a conexo do Data Binding entre o controle de
interface (objeto de dependncia e propriedade de dependncia, por exemplo, controle TextBox e a
propriedade Text) e a sua fonte (objeto comum e uma propriedade da classe, por exemplo, classe Pessoa
propriedade Nome). Mostra tambm os tipos de ligao que o WPF disponibiliza, que seria OneWay, ou
seja, do objeto de negcio para o controle na interface, TwoWay, que permite a ligao tanto do controle
da interface para objeto de negcio e vice-versa, e OneWayToSource, que a direo dos dados se d
entre o controle da interface para o objeto de negcio.


Figura 6. Ilustrao do Data Binding no WPF

Comparao entre WPF e WinForms
Ambas as tecnologias em alguns aspectos, levam vantagem uma sobre a outra, assim como
tambm levam desvantagens. Enquanto o WPF fornece uma aplicao mais bonita visivelmente e, em
algumas situaes, permite que o fluxo de dados trafegue de maneira fcil para o desenvolvedor, o
Windows Forms permite que uma aplicao seja criada rapidamente, talvez no muito chamativa no
criterio visual, mas de desempenho maior em algumas situaes e que exige um computador mais
simples que uma aplicao WPF.
Porm, nem tudo feito de vantagens. O WPF exige um computador mais robusto para a
aplicao rodar mais tranquila, principalmente quando os efeitos so pesados, e, como utiliza recursos
do hardware, como da placa de video, necessrio um hardware melhor para a aplicao corresponder
em termos de desempenho. No que uma aplicao no rodar em computadores de placa de vdeo
onboard, mas, seu desepenho no sera o mesmo do que instalado em um computador com hardware
melhor.
J o Windows Forms, apesar de no necessitar de um computador to robusto, no oferece grandes
recursos visuais e de manipulao de dados atraentes para o usurio, como o WPF. Ento, uma aplicao
Windows Forms mais trabalhosa em termos de negcio do que a aplicao WPF. Porm, a aplicao
WPF bem mais trabalhosa na questo visual do que a aplicao Windows Forms, e isso implica no
tempo de desenvolvimento da aplicao, tornando a construo do software um pouco mais demorada.
A tabela 1 mostra as mesmas caractersticas para as tecnologias e indicando se bem aproveitada ou
no por cada uma delas.

Caracterstica WPF Windows Forms
Necessita de um hardware mais
atual/robusto
Sim No


Visual sempre com
caractersticas do sistema
operacional
No Sim
Facilidade de manipulao dos
dados
Sim No
Criao fcil e rpido de
formulrios
No Sim
Desenvolvimento rpido No Sim

Comparao entre WPF e WinForms em uma aplicao
Somente comparaes conceituais no so suficientes para deixar claras as diferenas entre as
tecnologias desktop da Microsoft. A ideia mostrar um formulrio feito em Windows Forms e o mesmo
formulrio desenvolvido em WPF. O contexto um cadastro de clientes simples, com ligaes nos
campos por DataBinding. O tempo de construo de cada formulrio ser levado em conta tambm.
A figura 7 ilustra a estrutura do formulrio que ser desenvolvido. A figura 8 ilustra o diagrama
de classes da aplicao, no caso, somente a classe cliente. A listagem 4 mostra o cdigo da classe
cliente, com as propriedades criadas.


Figura 7. Estrutura do formulrio que ser constrdo em WinForms e WPF



Figura 8. Diagrama de classes da aplicao

Listagem 4: Classe cliente e suas propriedades.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CadastroCliente.Modelo
{
public class Cliente
{
public string Nome { get; set; }
public string CPF { get; set; }
public DateTime DataNascimento { get; set; }
public string Endereco { get; set; }
public int Numero { get; set; }
public string Complemento { get; set; }
public string Cidade { get; set; }
public string Bairro { get; set; }
}
}

O DataBinding, por padro, notifica a alterao do objeto aps o foco sair do controle. Por
exemplo, a propriedade nome do cliente s receber o valor do TextBox que representa o nome do
cliente somente quando este perder o foco. Para um melhor controle, legal o objeto ser preenchido
conforme o contedo do controle for alterado, ou seja, conforme o usurio digite o nome do cliente, o
objeto j vai sendo preenchido.
Para isto, necessrio implementar a interface INotifyPropertyChanged do .Net Framework na
classe cliente, e, em cada set das propriedades, chamar o evento implementado pela interface. A
listagem 5 mostra a classe cliente modificada, com a definio de propriedades no mtodo antigo, ou
seja, sem ser auto-property, e com o evento da interface e o mtodo que notifica a mudana de valor da
propriedade.

Listagem 5: Classe cliente implementando com o recurso de notificao de alterao de valor
das propriedades
using System;
using System.Collections.Generic;


using System.Linq;
using System.Text;
using System.ComponentModel;

namespace CadastroCliente.Modelo
{
public class Cliente : INotifyPropertyChanged
{
private string _nome;
private string _cpf;
private DateTime _dataNascimento;
private string _endereco;
private int _numero;
private string _complemento;
private string _bairro;
private string _cidade;

public string Nome
{
get { return _nome; }
set
{
_nome = value;
OnPropertyChanged("Nome");
}
}

public string CPF
{
get { return _cpf; }
set
{
_cpf = value;
OnPropertyChanged("CPF");
}
}

public DateTime DataNascimento
{
get { return _dataNascimento; }
set
{
_dataNascimento = value;
OnPropertyChanged("DataNascimento");
}
}

public string Endereco
{
get { return _endereco; }
set
{
_endereco = value;
OnPropertyChanged("Endereco");
}
}

public int Numero
{
get { return _numero; }


set
{
_numero = value;
OnPropertyChanged("Numero");
}
}

public string Complemento
{
get { return _complemento; }
set
{
_complemento = value;
OnPropertyChanged("Complemento");
}
}

public string Cidade
{
get { return _cidade; }
set
{
_cidade = value;
OnPropertyChanged("Cidade");
}
}

public string Bairro
{
get { return _bairro; }
set
{
_bairro = value;
OnPropertyChanged("Bairro");
}
}

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

// Mtodo que notifica a alterao da propriedade pelo evento
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}
}

Construo da interface do formulrio
Depois de definido a estrutura do objeto que representar o conceito a ser tratado, no caso, o
cliente, s desenhar o formulrio em cada uma das tecnologias. Lembrando que no Windows Forms o
DataBinding realizado no code-behind do formulrio. J no WPF, a ligao definida no prprio


XAML do controle. A figura 9 ilustra o formulrio em WinForms e a figura 10 mostra o formulrio
criado em WPF, ambos no estilizados, ou seja, sem aplicao de efeitos visuais nenhum.


Figura 9. Formulrio de cadastro de clientes em Windows Forms


Figura 10. Window representando o cadastro de clientes desenvolvida em WPF

Como o formulrio bem pequeno, a construo foi bem rpida, sendo aproximadamente 6
minutos para Windows Forms e 10 minutos aproximadamente para o WPF. Agora, o prximo passo ser
a estilizao das telas, nada muito enfeitado, somente para tirar o padro do sistema operacional dos
controles, porm, utilizando todos os recursos de cada tecnologia.
No Windows Forms, difcil a estilizao, pois cada propriedade a ser modificada tem que ser
atribuda para cada controle, a no ser que vrios controles do mesmo tipo sejam selecionados ou os
efeitos sejam atribudos via cdigo. Outro caminho a criao de um Custom Control, que uma classe
que herda de controle especifico e l o desenvolvedor trata a parte de estilizao via cdigo. Para
projetos grandes, esta seria a melhor soluo, mas como no o caso atual, a customizao ser feita nos
controles mesmo.
A figura 11 mostra o formulrio depois de aplicado cores e fontes aos controles. O tempo mdio
levado foi de 15 minutos para realizar a tarefa.



Figura 11. Formulrio de cadastro de clientes com customizaes na interface em WinForms

No WPF, dependendo do efeito a ser aplicado, difcil a estilizao tambm. Porem, para
pequenos efeitos, muito til, principalmente pela parte que os estilos podem ser atribudos por tipo de
controle e no necessita ir de controle a controle atribuindo cada propriedade para modificar o estilo do
mesmo.
A figura 12 apresenta a Window que representa o formulrio de clientes desenvolvido em WPF
estilizada. O tempo aproximado utilizado foi de 40 minutos. Os detalhes so bem mais reais em relao
ao WinForms, como por exemplo, a borda arredondada, utilizao de transparncia e gradientes. Porm,
o custo disso foi uma maior demora na construo da estilizao.


Figura 12. Window do cadastro de clientes estilizada

Ligao e manipulao de informaes
Com a interface pronta, a ultima parte da comparao a ligao dos DataBindings em ambas as
tecnologias. No Windows Forms a ligao feita no code-behind do formulrio, em qualquer evento,
mas no exemplo, ser implementado no Load, e a declarao semelhante listagem 6.
A ligao feita no controle, a partir da propriedade DataBindings, que uma coleo da classe
Binding. O mtodo que adiciona o binding nesta coleo, entre vrios overloads, o mais apropriado o
apresentado na listagem, pois o que permite alterar o modo de notificao.
Na sobrecarga utilizada, os parmetros na sequencia so: a propriedade que vai ser utilizada no
controle, o objeto que ser a fonte da informao, a propriedade do objeto fonte que ser
preenchida/recuperada, permisso de formatao de dados, e o enumerador que representa o tipo de
notificao de alterao.



Listagem 6: Declarao do DataBinding no Windows Forms
controle.DataBindings.Add(new Binding("PropriedadeDoControle", objetoFonte,
"Nome da propriedade no objeto", true, DataSourceUpdateMode.OnPropertyChanged);

J no WPF, a ligao dos controles com a fonte de dados pode ser tanto no XAML como no code-
behind. No exemplo, ser utilizado o primeiro mtodo, ou seja, definio no prprio XAML. A
declarao segue na listagem 7.
A definio da ligao realizada no atributo da tag do controle desejado. Semelhante ao
Windows forms, informado o nome da propriedade do objeto que ser fonte de dados e o modo da
notificao de atualizao da informao.

Listagem 7: Ligao do DataBinding no WPF.
<TextBox Text="{Binding Path=NomeDaPropriedadeNoObjeto,
UpdateSourceTrigger=PropertyChanged}" />

Porm, no WPF, a definio do objeto fonte de dados a partir da propriedade DataContext. Essa
propriedade existe na maioria dos componentes, mas comumente, atribuda na tag Window. O
DataContext no o objeto fonte de dados em si, mas sim um objeto que contem este o objeto fonte de
dados, inclusive, necessrio especificar o nome da instancia do objeto. Por exemplo, na classe
FonteDados tem uma propriedade ObjetoFonte, do tipo cliente. Na definio do binding, ser necessrio
colocar ObjetoFonte.Nome, caso, por exemplo, deseja-se pegar o nome do cliente.
Um dos atributos do Binding no WPF, o ElementName. Este atributo aponta como objeto
fonte outro elemento definido no XAML. Por exemplo, o TextBox nome s ficar habilitado caso o
CheckBox estiver marcado. Isto tambm possvel no Windows Forms, s colocar como objeto fonte
o controle desejado. A listagem 8 mostra a definio do DataContext, em sublinhado, na window da
aplicao. Nesta situao, apontado que o DataContext da window ela mesma, no caso, seu code-
behind. necessrio dar um nome para os controles, na necessidade de utilizar o atributo ElementName.

Listagem 8: Ligao do DataBinding no WPF.
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
...
x:Name="CadastroCliente"
DataContext="{Binding ElementName=CadastroCliente,
UpdateSourceTrigger=PropertyChanged}">

Tanto no Windows Forms como no WPF, o objeto que ser a fonte das informaes necessitar de
notificar a alterao de valores da propriedade. Ento, a classe onde estar este objeto dever herdar da
interface INotifyPropertyChanged, igual a classe cliente. No exemplo, o objeto fonte ser do tipo cliente,
ento, a listagem 9 mostra a definio da propriedade cliente.

Listagem 9: Propriedade cliente que servir de fonte de dados para o DataBinding
private Cliente _objetoFonte;

public Cliente ObjetoFonte
{
get { return _ objetoFonte; }
set
{
_ objetoFonte = value;
OnPropertyChanged("ObjetoFonte");


}
}

Com estes passos realizados, s codificar a ligao nos controles com as propriedades do objeto
fonte e o DataBinding entra em ao. A listagem 10 mostra as ligaes dos TextBoxs nome e cidade no
Windows Forms. A listagem 11 mostra o XAML da definio das mesmas propriedades de cliente para
o WPF.

Listagem 10: Definio do DataBinding no Windows Forms
txtNome.DataBindings.Add(new Binding(
"Text", ObjetoFonte, "Nome", true,
DataSourceUpdateMode.OnPropertyChanged));
txtCidade.DataBindings.Add(new Binding(
"Text", ObjetoFonte, "Cidade", true,
DataSourceUpdateMode.OnPropertyChanged));

Listagem 11: Propriedade cliente que servir de fonte de dados para o DataBinding
<TextBox Text="{Binding Path=ObjetoFonte.Nome,
UpdateSourceTrigger=PropertyChanged}" />
...
<TextBox Text="{Binding Path=ObjetoFonte.Cidade,
UpdateSourceTrigger=PropertyChanged}" />

O uso do DataBinding, independente a tecnologia utilizada, muito til, pois evita de ficar
preenchendo objetos e controles na mo. O tempo de desenvolvimento cai significativamente e o
cdigo fica bem mais enxuto. Tanto no WinForms como no WPF, a definio do DataBinding bem
simples.
O que diferencia uma tecnologia da outra o tratamento quanto aos tipos de objeto. No WPF, por
exemplo, o texto da propriedade foi digitado errado, ele no gera nenhum erro, simplesmente no realiza
a ligao. J no WinForms, ele gera o erro, que no tratado, para toda a aplicao para notificar o erro.
Estes erros podero ser tratados, em ambas as tecnologias, porm, no este o objetivo por agora.
Analise de casos
importante levar em conta tambm que o tipo do software a ser produzido essencial na escolha
da tecnologia a ser utilizada, para assim se obter uma melhor vantagem na construo do mesmo. Ento,
para deixar bem claro ao leitor, sero apresentados alguns casos onde possvel aplicar as tecnologias,
porem, analisando caso a caso qual delas a melhor para determinada situao.
Caso 1: Necessidade de alto processamento
O objetivo do projeto criar um sistema simples de prazo curto, sem se importar muito com o
visual para o usurio e precisa ter um bom desempenho, pois o sistema ser utilizado para converter uma
base de dados do banco Firebird para o SQL Server. Isto significa que o software ter de ser simples e
funcional. Logo, no necessrio fazer grandes interfaces, com animaes, efeitos e brilhos. Ento,
neste caso, antes de escolher a tecnologia a ser utilizada, necessrio por na balana alguns itens para
analise.
Se a aplicao precisa de um alto desempenho, pode ser utilizado WPF, j que este utiliza recursos
de hardwares multimdia, como da placa de vdeo, para processar as interfaces com o usurio, liberando
um pouco o trabalho do processador. Porem, o software pode demorar um pouco mais para ser
desenvolvido, pois mais trabalhosa a construo de formulrios com o WPF, ainda mais se as telas
forem grandes.
Por outro lado, a utilizao de WinForms no pode ser descartada, j que bem simples a
construo de formulrios e diminui significativamente a construo do software. A desvantagem desta


tecnologia que somente o processador ir trabalhar na execuo, j que o Windows Forms no utiliza
outros hardwares para auxilia-lo no processamento do sistema.
Para este caso, a sugesto melhor seria utilizar o WinForms, pois, neste tipo de software, a maioria
das vezes, o computador fica dedicado somente a execuo do sistema, mantendo um bom desempenho
da aplicao, e no necessitando de grandes efeitos na interface com o usurio.

Caso 2: Exibio de dados complexos
O objetivo do projeto apresentar os dados que o cliente deseja agrupados, semelhante a um
relatrio, porm, como o cliente no possui e no vai adquirir a licena de um framework de relatrios,
como Crystal Reports, a apresentao dos dados ser desenvolvida em formulrios mesmo.
O cliente deseja tambm que certos dados de alguns conceitos, como por exemplo, cliente e
fornecedor, sejam apresentados em cartes, pois como contem muitas informaes de um mesmo
registro, como nome, cpf/cnpj, endereo, etc., os dados em modo carto fica mais fcil a visualizao.
Nesta aplicao, a interface importante para o objetivo do desenvolvimento, j que o cliente uma
maneira no muito comum para a visualizao dos dados. Ento, quando se trata de efeitos visuais, a
melhor opo o WPF em relao ao Windows Forms.
Para desenvolver o que o cliente precisa no WinForms demandaria muito mais tempo que o WPF,
pois este tem um recurso chamado Data Template, que uma forma de modelar a apresentao dos
dados a partir de objetos. A listagem 12 mostra um exemplo de Data Template, concatenando
propriedades de um nico objeto de uma maneira simples, verstil e de fcil manuteno dados de
endereo, como logradouro, nmero e bairro.

Listagem 12: Exemplo de Data Template modelando dados de endereo.
<DataTemplate x:Key="DataTemplateEndereco">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Logradouro}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding Path=Numero}" />
<TextBlock Text=" - "/>
<TextBlock Text="{Binding Path=Bairro}" />
</StackPanel>
</DataTemplate>

Com o DataTemplate do WPF, modelar a apresentao de dados fica bem mais facil, eficaz e
apresentavel que no WinForms. Porm, no s na modelagem dos dados que o WPF permite uma
melhor apresentao dos dados.
Por ser estruturado em XAML, ele permite uma hierarquia de controles mais abrangente que o
Windows Forms. Isso significa que, por exemplo, possivel colocar um TextBox dentro de um Boto,
ou o contrrio. Essa hierarquia permite um agrupamento de controles que revoluciona a apresentao
dos dados dentro dos controles. possvel fazer um DataGrid agrupar e filtrar os registros j buscados
no banco de dados sem precisar realizar outra consulta pra isto, mostrar grficos, mais dados agrupados,
entre outras informaes.
A figura 13, figura 14, figura 15 e figura 16 ilustram a o grande poder de manipular os dados
dos DataGrids do WPF, como detalhamento, insero de objetos como grficos, agrupamento de
registros com os mesmos que j esto no Grid e filtragem de dados, respectivamente.



Figura 13. DataGrid com detalhamento de registros



Figura 14. DataGrid com grfico no detalhamento do registro



Figura 15. Agrupamento dos registros que foram consultados, sem necessitar de um novo
acesso a fonte de dados



Figura 16. Filtragem dos registros, realizado no prprio DataGrid

A unio do DataTemplate com o poder de manipular e apresentar os dados para o usurio do WPF,
permite que o desenvolvedor faa grandes trabalhos e consegue atingir o objetivo, que tornar a
necessidade do cliente, que era um problema, em soluo.

Nota do DevMan
O DataGrid nativo do .net no possui um grande leque de recursos para o desenvolvimento. Ele
no pobre, mas tambm no o melhor. Por isso, grandes empresas especializadas em
desenvolvimento de controles, como a Telerik e a Xceed, produzem um framework de controles e
comercializam, muitas vezes por preos medianos, no to caros, mas tambm, no muito baratos.
A maioria dos controles so codificados para WPF/Silverlight, Windows Forms e ASP.NET. A
venda destes tambm pode ser realizada separadamente, ou seja, se a empresa que deseja comprar
fabrica software utilizando WinForms, compra somente o pacote WinForms de controles, conseguindo
um preo mais em conta.
Em algumas situaes bem melhor adquirir estes produtos, que facilitam o desenvolvimento do
software, do que desenvolver um desde o inicio, com a incerteza se ele atender todas as necessidades
ou no.

Caso 3: Aplicao simples, extensa e ser executada em hardware
defasado
O objetivo do projeto fazer um sistema simples, com fluxo de caixa, cadastro de clientes,
fornecedores, produtos, e relatrios. Este sistema ser utilizado em vrias maquinas e, muitas delas, j
possuem muito tempo de uso e no foi realizado upgrade de hardware.


Esta ultima informao chave para a seleo da tecnologia a ser utilizada. Se a escolha for WPF,
um dia aps o uso, o cliente ligar para a empresa que desenvolveu o software reclamando da lentido
do sistema. O WPF uma excelente tecnologia, porem, como toda tecnologia, tem vantagens e
desvantagens, e, sua principal desvantagem, se tornar lento em maquinas com hardware defasado. Para
a aplicao executar sem problemas, necessrio um hardware melhor.
Ento, como as configuraes de hardware no se enquadram na tecnologia mais nova, a opo
utilizar Windows Forms, com pouco recurso visual, porm, bem eficiente neste tipo de situao, onde o
hardware um problema. O sistema poder satisfazer a necessidade do cliente facilmente, mesmo
desenvolvido com o Windows Forms.

Concluso
O objetivo deste artigo foi ajudar o leitor a identificar algumas situaes onde melhor a aplicao
do WinForms e onde melhor a aplicao do WPF. Muitos desenvolvedores nunca trabalharam com
WPF, ento s trabalham com o Windows Forms.
Ento, quando o cliente necessita de um visual melhor trabalhado ou visualizao dos dados de
maneira especifica, o programador pode no oferecer o melhor produto, utilizando Windows Forms. As
vezes, isto acontece por que quem vai desenvolver o software no conhece o WPF, j que uma
tecnologia mais nova, e as vezes no so todos que possuem o privilgio de trabalhar com uma
tecnologia destas no emprego, e no possuem tempo de estudar isso fora do expediente do trabalho.
De alguma forma, tambm objetivo deste artigo encorajar e introduzir os desenvolvedores
WinForms a produzir seus programas em WPF, comparando a tecnologia que ele utiliza atualmente e
mostrando como uma aplicao pode ser desenvolvida em WPF, com grandes recursos que podem ser
um diferencial para os sistemas que pretendero desenvolver.

Links
http://www.baixaki.com.br/info/1807-o-que-e-api-.htm
HowStuffWorks O que uma API?
http://informatica.hsw.uol.com.br/conferencia-api1.htm
Introduo ao desenvolvimento de Windows Forms
http://msdn.microsoft.com/pt-br/vbasic/ms789117.aspx
Introduo ao WPF
http://msdn.microsoft.com/pt-br/library/cc564903.aspx
Windows Presentation Foundation
http://windowsclient.net/WPF/
Apresentando LINQ - Language Integrated Query.
http://www.macoratti.net/07/12/net_linq.htm
Introduo ao DirectX.
http://msdn.microsoft.com/pt-br/library/cc518041.aspx
Introduo ao Microsoft Windows Workflow Foundation
http://msdn.microsoft.com/pt-br/library/aa480214.aspx
Introduo ao Windows Presentation Foundation
http://msdn.microsoft.com/pt-br/library/aa970268.aspx
.NET Framework 3.5 Commonly Used Types and Namespaces Poster
http://windev.wordpress.com/2007/11/18/net-framework-35-commonly-used-types-and-namespaces-
poster/
Templates, or Why I love WPF (and Silverlight Too!)
http://www.scottlogic.co.uk/blog/colin/2010/09/templates-or-why-i-love-wpf-and-silverlight-too/

Saiba Mais


Artigo - .net Magazine 74 - WPF para aplicaes comerciais Parte 1 Paulo Quicoli
http://www.devmedia.com.br/post-17161-WPF-para-aplicacoes-comerciais-Parte-1--Net-Magazine-
74.html
Artigo - .net Magazine 75 - WPF para aplicaes comerciais Parte 2 Paulo Quicoli
http://www.devmedia.com.br/post-17461-WPF-para-aplicacoes-comerciais-Parte-2--Net-Magazine-
75.html
Artigo - .net Magazine 75 - WPF e Expression Blend 4
http://www.devmedia.com.br/post-17460-WPF-e-Expression-Blend-4--Net-Magazine-75.html
Artigo - .net Magazine 55 - Aplicaes WPF de Sucesso Rodrigo Sendin
http://www.devmedia.com.br/post-10735-Artigo--net-Magazine-55-Aplicacoes-WPF-de-Sucesso.html
Artigo - Programa Simples em Windows Forms com C# de Clculo de Frete Wellington Balbo de
Camargo
http://www.devmedia.com.br/post-16963-Programa-Simples-em-Windows-Forms-com-C-de-Calculo-
de-Frete.html
Artigo - Criando aplicaes Windows Forms auto-ajustveis ao tamanho da tela Gustavo Barros
http://www.devmedia.com.br/post-4926-Criando-aplicacoes-Windows-Forms-auto-ajustaveis-ao-
tamanho-da-tela.html
Artigo Implementando o recurso de ajuda em sistemas Windows Forms
http://www.devmedia.com.br/post-3935-Implementando-o-recurso-de-ajuda-em-sistemas-Windows-
Forms.html
Artigo - Dicas .NET - Melhorando a validao em formulrios Windows
http://www.devmedia.com.br/post-2114-Dicas--NET-Melhorando-a-validacao-em-formularios-
Windows.html
Artigo - .net magazine 69 - Sabores.NET - Rodrigo Sendin
http://www.devmedia.com.br/post-15240-Artigo--net-magazine-69-Sabores-NET.html
Artigo - .net Magazine 53 - C#(csharp) 3.0 Giovanni Bassi
http://www.devmedia.com.br/post-10608-Artigo--net-Magazine-53-C-csharp-3-0.html

Você também pode gostar