Beruflich Dokumente
Kultur Dokumente
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.
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.
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.
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
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 } }
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 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.
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.
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.
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 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.
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