Sie sind auf Seite 1von 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 Wi ndows 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 Necessita de um hardware mais atual/robusto WPF Sim Windows Forms No

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

No

Sim

Sim No No

No Sim 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 using using using System; System.Collections.Generic; System.Linq; 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 codebehind. 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 codebehind. 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-namespacesposter/ 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-Magazine74.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-Magazine75.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-Calculode-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-aotamanho-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-WindowsForms.html Artigo - Dicas .NET - Melhorando a validao em formulrios Windows http://www.devmedia.com.br/post-2114-Dicas--NET-Melhorando-a-validacao-em-formulariosWindows.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

Das könnte Ihnen auch gefallen