WPF vs. WinForms - a perspectiva de um programador Delphi?


38

Eu li a maioria dos tópicos principais sobre WPF vs. WinForms e me vejo preso na ambivalência infeliz em que você pode cair ao decidir entre a tecnologia anterior testada e verdadeira (Winforms) e seu sucessor (WPF).

Eu sou um programador veterano de Delphi há muitos anos que finalmente está saltando para o C #. Meus colegas programadores de Delphi por aí entenderão que estou empolgado em saber que Anders Hejlsberg, famoso por Delphi, foi o arquiteto por trás do C #. Tenho uma forte dependência dos componentes personalizados da Delphi VCL, especialmente aqueles envolvidos na criação de assistentes e componentes de várias etapas que atuam como um contêiner para componentes filhos.

Com esse pano de fundo, espero que aqueles que mudaram de Delphi para C # possam me ajudar com minha decisão WinForms vs. WPF para escrever meus aplicativos iniciais. Observe que estou muito impaciente quando a codificação e coisas como suporte completo ao depurador automático e completo podem fazer ou interromper um projeto para mim, incluindo a capacidade de encontrar informações prontamente disponíveis sobre os recursos e chamadas da API e, mais ainda, soluções alternativas para bugs .

Os tópicos e comentários do SO no início de 2009 me preocupam muito com o WPF quando se trata de possíveis frustrações que podem prejudicar minha codificação de desenvolvimento da interface do usuário do C #. Por outro lado, gastar uma quantidade excessiva de tempo aprendendo uma tecnologia de API que, mesmo que não seja abandonada, será substituída em breve (WinForms), é igualmente preocupante e acho o suporte da GPU no WPF tentador.

Daí minha ambivalência. Como ainda não aprendi nenhuma das técnicas, tenho uma rara oportunidade de começar de novo e não tenho que enfrentar a grande curva de "desaprendizagem" que vi as pessoas mencionarem em vários tópicos quando um programador do WinForms faz a mudança para o WPF. Por outro lado, se o uso do WPF for muito frustrante ou terá outras importantes consequências negativas para um desenvolvedor RAD impaciente como eu, continuarei usando o WinForms até que o WPF atinja o mesmo nível de suporte e facilidade de uso. Para dar um exemplo concreto da minha psicologia como programador, usei o VB e, posteriormente, o Delphi para evitar completamente a dor real de codificar com o MFC, uma biblioteca de interface do usuário do Windows que muitos desenvolvedores sofreram enquanto desenvolviam aplicativos antigos do Windows. Nunca me arrependi da minha sorte de evitar o MFC.

Também seria reconfortante saber se Anders Hejlsberg tinha uma mão na arquitetura do WPF e / ou WinForms, e se existem disparidades na visão criativa e na facilidade de uso incorporadas em qualquer base de código. Finalmente, para os programadores Delphi novamente, deixe-me saber quanto "IDE schock" eu uso ao usar o WPF em oposição ao WinForms, especialmente quando se trata de suporte a depurador. Quaisquer comentários do mercado de trabalho atualizados para 2011 também serão apreciados.


2
O WPF não tem uma reputação realmente ruim de desempenho ruim?
David Heffernan 01/03

9
@ David: Ele realmente tem essa reputação, mas, como sempre, a realidade não é tão ruim quanto o rap. A GUI do Visual Studio 2010 foi reescrita no WPF e, na maioria das máquinas, não parece haver uma diminuição perceptível da velocidade em comparação com o VS 2008. @Robert: Dito isto, minha recomendação seria muito a favor do WinForms, especialmente para um convertido em Delphi. Mas estou um pouco hesitante em postar isso como uma resposta, para que não seja prejudicada no esquecimento. Todo mundo parece estar inclinado para o inferno, porque é uma tecnologia "antiga", como se isso realmente significasse alguma coisa.
Cody Grey

@Cody. Entendido. Estou recebendo ótimas informações com as respostas e os comentários, mas espero obter informações mais diretas sobre o WPF e seu suporte ao depurador versus o WinForms e algumas informações do mercado de trabalho. Ainda estão faltando respostas para minhas perguntas nessas áreas de tópicos.
Robert Oschler

1
@CodyGray: Você deve estar brincando. O VS2010 é cem vezes mais lento que o VS2008, e o WPF também. Sua impressão provavelmente se deve ao viés habitual do programador: você olha apenas as máquinas topo de linha mais recentes, que a maioria dos usuários normais não possui.
Timwi

Respostas:


21

Se você tem experiência com Delphi, ficará desapontado com o WinForms. Você tentará fazer coisas fáceis na VCL, apenas para descobrir que são dolorosamente difíceis ou mesmo impossíveis. O WPF será muito menos restritivo.

Por exemplo, aqui estão apenas algumas das limitações do WinForms que encontramos:

  • O WinForms não tem nada que se compare ao TAction; portanto, se você está acostumado a codificar com ações, compartilha o mesmo texto e ícone entre um item de menu e um botão da barra de ferramentas e um menu com o botão direito do mouse, centralizando sua lógica de ativação e atualizando o estado ativado em segundo plano com o OnUpdate ... você odiará o WinForms, onde terá que fazer tudo isso da maneira mais difícil e propensa a erros.
  • O MainMenu antigo do WinForms (.NET 1.0 vintage) não oferece suporte a imagens ao lado dos itens de menu e o novo MenuStrip (introduzido no .NET 2.0) está repleto de bugs que a Microsoft se recusa a corrigir (porque as correções podem quebrar a compatibilidade com versões anteriores).
  • Muitos controles, por exemplo, o TreeView, são lamentavelmente insuficientes em comparação com seus equivalentes VCL (dolorosamente lento, sem necessidade de proprietário, muitas opções de personalização faltando, etc.)
  • Não há nada parecido com a vibrante comunidade de desenvolvedores de controle de terceiros com os quais você está acostumado no Delphi. Existem bibliotecas de controle de qualidade por aí, mas você paga por elas - ofertas gratuitas como o VirtualTreeView simplesmente não estão disponíveis para o WinForms.

O WPF é um pouco mais básico em alguns aspectos do que o WinForms, mas é imensamente mais extensível.

  • Você quer algo como ação? O WPF possui o ICommand, que é tão rico quanto você está acostumado (mas não deixe de ler o artigo MVVM de Josh Smith - normalmente você precisa ativar / desativar seus comandos manualmente quando o estado mudar, mas a versão dele aciona automaticamente o código de ativação) em segundo plano, como você está acostumado com o OnUpdate).
  • Você quer imagens nos menus? Isso é incorporado (e nem de longe é tão problemático quanto no WinForms).
  • O WinForms deixa de lado o desenho do proprietário em alguns controles importantes, mas se você estiver usando o WPF, não precisará do desenho do proprietário - se quiser que os nós do TreeView tenham texto em preto seguido de um número azul entre parênteses, basta coloque-o no seu DataTemplate e funcione, não é necessário nenhum código feio para o proprietário.
  • Você quer controles de terceiros? Em muitos casos, você não precisa deles, porque você pode estender o que há de maneiras do WinForms e, sim, os desenvolvedores de VCL podem apenas sonhar.

O WPF tem uma curva de aprendizado muito íngreme, mas se você escolher um bom livro (por exemplo, " WPF 4 Unleashed "), isso ajudará você a superar o pior - e ficará feliz em trabalhar com uma estrutura que não o impedirá como o WinForms.


1
Obrigado pelo comentário direto do Delphi. Quaisquer comentários do mercado de trabalho e informações sobre o suporte do depurador do VS 2010 para o WPF, especialmente questões de rastreamento / inspeção? Vou verificar o livro ao qual você vinculou.
Robert Oschler

1
Não conheço o mercado de trabalho. Quanto ao depurador, espere frustração se o construtor da sua janela lançar uma exceção, porque o depurador ficará relutante em fornecer um rastreamento de pilha - mas tudo o que você precisa fazer é cavar dois níveis de InnerException na caixa de diálogo de detalhes da exceção do depurador. E se suas ligações não funcionarem, execute no depurador e procure na janela Saída para ver os erros de ligação. Fora isso, não sei ao certo quais preocupações você tem. O WPF depura bem na minha experiência, e o MVVM permite que você teste de unidade mais da sua lógica de interface do usuário do que no WinForms.
Joe

6
Curva de aprendizado muito íngreme. Você não faz muito programa no WPF; você faz perguntas sobre como convencer o WPF a fazer o que deseja.
Ian Boyd

Na verdade, alguns dos maiores obstáculos são aprender a trabalhar com uma estrutura que separa as responsabilidades adequadamente, em vez de apenas ter tudo derivado cegamente do TKitchenSink.
Joe White

1
Posso ter formulários Delphi, mas manter a linguagem C #? Por favor?
Robert Harvey

13

Normalmente, fico muito surpreso com as pessoas dizendo que não tiveram uma boa experiência com o WPF. Eu sou um desenvolvedor que mudou de C ++ / MFC para C # / WinForms para C # / WPF. A transição do WinForms para o WPF não foi fácil, porque aprender XAML não é muito fácil, mas depois que você se apossar dele, é uma tecnologia incrível. Eu, por exemplo, não posso voltar ao WinForms. WPF é simplesmente incrível.

A outra coisa que me incomoda é como as pessoas normalmente associam o WPF apenas à interface do usuário. É realmente 100 vezes melhor que o WinForms, na minha opinião, para facilitar o design da interface do usuário, mas há muitos outros motivos pelos quais você adorará usar o WPF:

  1. UI, é claro.
  2. Ligações. Simples magia. O recurso mais poderoso após a interface do usuário. Os aplicativos LOB se beneficiam mais disso.
  3. Comandos.
  4. Separação de preocupações. Designers trabalham em design, programadores programadores.
  5. Propriedades anexadas. Você pode estender a funcionalidade de controles de terceiros sem o código-fonte (embora esse ponto possa fazer parte do primeiro).
  6. Transição fácil para o Silverlight (Web e WP7)

Você pode não concordar comigo sobre o último ponto como um motivo para aprender o WPF, mas se você me perguntar, é um dos maiores. Você aprende WPF, pode facilmente fazer a transição para o Silverlight. O Silverlight está crescendo muito e também é uma tecnologia incrível.

E a maior razão é que é o futuro. Pode ser mesclado com o Silverlight, mas as habilidades permanecerão as mesmas.

Então, eu aconselho você a seguir o caminho do WPF.


1
Eu não estou dizendo que eu discordo, mas todas essas razões são UI relacionados (embora você dizer que A outra coisa que me incomoda é como as pessoas WPF normalmente associado com apenas UI )
Ed S.

1
+1 porque concordo com todos os seus pontos. Eu escolhi se queria aprender o WPF ou o Winforms, e escolho o WPF e nunca me arrependi. @ Ed: Eu não vejo nenhum deles como sendo estritamente relacionado à interface do usuário, exceto o primeiro.
Rachel

1
@ Rachel: Sério? A ligação é usada para atualizar a interface do usuário quando um valor de propriedade é alterado. A separação das preocupações no item 4 obviamente se aplica apenas ao desenvolvimento de uma interface do usuário. O nº 5 é sobre controles de terceiros. Sem interface do usuário, sem controles. O número 6 é novamente sobre traduzir para uma interface do usuário do silverlight. Estou esquecendo de algo?
Ed S.

3
Eu fui mais ou menos na direção oposta: WPF -> WinForms -> C ++ / MFC. Sim, sou rebelde; Eu nado rio acima. Eu simplesmente não vejo nada atraente sobre o que o WPF traz para a interface do usuário. Um monte de software horrível e de aparência não nativa não é minha ideia de "progresso". Além disso, não tenho certeza de como os padrões de design que muitos (incluindo esta resposta) associam ao WPF são de alguma forma exclusivos do WPF. Você pode usar padrões de design em qualquer linguagem ou estrutura da GUI. A diferença é simplesmente que, se você não é forçado , as pessoas não? A facilidade de transição para o Silverlight é a única razão convincente aqui.
Cody Grey

5
Minha primeira tarefa com um aplicativo WPF: soltar uma barra de ferramentas, torná-la 14 dlus de altura. não pode ser feito . Segunda tarefa: defina a fonte do formulário para corresponder à face e tamanho da fonte do usuário. não pode ser feito Terceiro passo: adicionar itens a uma lista sem vincular não pode ser feito .
Ian Boyd

5

Claramente, o WPF é o caminho a seguir no futuro. Dominar é difícil, mas a plataforma é muito bem arquitetada e flexível.

Algumas linhas de conselho:

  • Comece fácil: não tente implementar seu primeiro projeto usando apenas MVVM ou animações sofisticadas. Comece simples com janelas, botões e listas.
  • Aproveite o DataBinding.
  • Compre o livro WPF Unleashed de Adam Nathan.

+1. Resposta prática. Tente não implementar o seu primeiro projeto utilizando apenas MVVM ou fantasia animações
Karthik Sreenivasan

4

Devo primeiro notar que sou principalmente um desenvolvedor asp.net, embora já tenha usado bastante o winforms. A mudança para o WPF não é tão grande quanto você faz (imo) depois de uma semana ou mais (mais de 40 horas), a maioria era uma segunda natureza novamente.

De qualquer forma, acredito que Anders Hejlsberg é um dos arquitetos por trás do WPF, pelo menos de acordo com os editores deste livro->

Como um dos arquitetos por trás do WPF, Chris Anderson explica habilmente não apenas o 'como', mas também o 'porquê'. Este livro é um excelente recurso para quem deseja entender os princípios de design e as melhores práticas do WPF. ”- Hejlsberg, técnico, Microsoft Corporation

http://www.amazon.com/Essential-Windows-Presentation-Foundation-WPF/dp/0321374479


11
"Como um dos arquitetos por trás do WPF, Chris Anderson explica com habilidade ..." sugere que Chris Anderson é um dos arquitetos por trás do WPF. Anders Hejlsberg é apenas um "técnico" da Microsoft Corporation, de acordo com o texto citado, o que não prova seu envolvimento no WPF.
Andreas Rejbrand

Ah, isso pode ser verdade, mas mostra que ele a respeita!

2
Ou pelo menos que ele respeite Chris.
Bruce McGee

1
Ou pelo menos que o departamento de relações públicas tenha alguém com reputação para fazer um comentário.
quickly_now

@Andreas; Boa piada: apenas "técnico". Não quer diminuir Chris Anderson - Ele é um cara legal, mantendo um perfil discreto ( msdn.microsoft.com/en-us/ff395959 existe, mas o simplegeek.com não é atualizado há muito tempo). Anders Hejlsberg está envolvido em muitas coisas do .NET (os bolsistas técnicos têm um amplo alcance), afinal ele é um cara de estrutura (VCL, WCF, etc.) - consulte simple-talk.com/content/article.aspx?article=673 e microsoft .com / PressPass / exec / techfellow / Hejlsberg / default.mspx ) e há apenas alguns companheiros técnicos ...
Jeroen Wiert Pluimers

2

O Winforms é quase idêntico ao desenvolvimento do Delphi. E, claro, há uma razão para isso. Assim como o modelo de objeto Delphi / Object Pascal influenciou fortemente o C #, o sistema de formulários influenciou o Winforms.

WPF parece ser a direção que as coisas estão seguindo; foi dito que a interface do usuário do VS2010 (maravilhosa!) é baseada em WPF, ao contrário das gerações anteriores criadas no Winforms.

Se você quiser ficar na sua zona de conforto, use formas de win. Se você quiser se atualizar com as últimas e melhores, mergulhe no WPF.


3
WinForms é o que o Delphi estende, é realmente muito frustrante em comparação com o Delphi. É mais parecido com o VB-3 que com o Delphi, e no IME o nível de frutação é semelhante.

2

Eu não sou um programador Delphi, mas sim, eu trabalhei no WinForm (fortemente) e no WPF (menos que moderado). Eu concordo com você, até certo ponto, no nível de frustração de alguém que mudaria do WinForm para o WPF, pois eu mesmo estou nessa situação, mas apenas até me acostumar. Aprenda e veja como é maravilhoso e flexível o WPF se compara ao WinForm. Tem uma curva de aprendizado pesada, pelo menos para alguém que vem do fundo Delphi, e não do Winform. Para você, definitivamente vale a pena avançar para o WPF em vez do WinForm, e vale a pena.

Você pode querer olhar nos links abaixo para começar:


1

Eu havia feito alguns trabalhos do Windows Forms (principalmente em Pocket PCs), além de outros ambientes não-.NET que usavam os mesmos princípios. Quando me mudei para o WPF, cerca de três anos atrás, durante os primeiros meses eu estava xingando. Eventualmente, apenas "clicou" e eu não olhei para trás - na verdade, ficaria chateado se meu próximo projeto exigisse que eu voltasse para o Windows Forms.

A última vez que o Windows Forms foi atualizado foi em 2005 (VS 2005.) Ele ainda está lá, mas não está mais sendo aprimorado pela Microsoft. O WPF é o novo garoto-propaganda dos aplicativos de desktop; portanto, se você for para a plataforma .NET usando as ferramentas do MS, diria que é a aposta segura. Algumas pessoas consideram o Silverlight como uma solução de desktop, mas quando eu vi isso como uma possibilidade, descobri que ele tinha muitas limitações (o que pode fazer sentido em um contexto da Web, mas não tanto no desktop).

Conclusão: há uma curva de aprendizado acentuada e ainda estou aprendendo. Mas tudo valeu a pena. É muito divertido.


1

Se você deseja escrever novos aplicativos do zero, usar o WinForms seria um erro. É basicamente morto de uma perspectiva de investimento. A Microsoft manterá o controle por um longo tempo, mas você não obterá novos recursos, novos apoios etc. O WPF é a direção clara para aplicativos de desktop para o futuro na plataforma MS.

Do ponto de vista da carreira, é muito melhor conhecer WPF vs. WinForms. Pelas mesmas razões acima. Além disso, você terá uma boa vantagem sobre o aprendizado do Silverlight. Há muita sobreposição entre essas duas plataformas.

E, finalmente, o WPF é simplesmente mais divertido. E mais poderoso.

A curva de aprendizado é mais acentuada. Mas é mais gratificante no final.


0

Uma consideração adicional que deve ser mencionada é que não há plano para o suporte ao WPF em mono . Sei que você não manifestou interesse em suporte (mono) para várias plataformas, mas pode haver uma oportunidade para isso no seu futuro (se você optar pelo WinForms). Presumivelmente, o suporte ao WPF em mono (ou similar) será fornecido.

editar: Como o link que eu forneci apontou, e o comentário de Gulshan destacou, o Moonlight é um esforço de código aberto liderado pela equipe mono para fornecer suporte ao Silverlight em várias plataformas .


Mas o Moonlight está em desenvolvimento ativo.
Gulshan #

-1

Fiquei empolgado quando soube do WPF, a ideia parecia ótima e tudo o que vi foi lindo. No entanto, quando cheguei a usá-lo no Visual Studio 2008 (reconhecidamente, um beta), achei frustrante e peculiar trabalhar com o designer / IDE.

Postei algumas informações no meu blog na época:
http://blog.dantup.com/2007/08/visual-studio-2008-beta-2-first.html
http://blog.dantup.com/2007 /08/wpf-designer-cider-part-2.html

Eu não tentei em 2010, apesar de ter falado com algumas pessoas, e parece que ainda é um pouco complicado / chato de entender.

Eu acho que seu aplicativo sem dúvida ficaria melhor no WPF, mas também acho que você levará mais tempo para construir e você vai bater a cabeça muito ao longo do caminho.


"Eu acho que seu aplicativo sem dúvida ficaria melhor no WPF". Não necessariamente - o WPF não impedirá que você escreva uma interface de usuário de merda. Eu tenho alguns exemplos aqui (um dos quais é meu, apesar de ser apenas um aplicativo descartável rápido e sujo para testar algumas coisas.) Com tempo e esforço, você pode fazer coisas incríveis no WPF.
MetalMikester

Ponto justo. O que eu quis dizer foi que o WPF permite criar um aplicativo mais bonito, pois você é menos limitado pelos widgets do Windows. Claro, isso pode ser uma coisa boa e ruim!
Danny Tuppeny #

3
Definitivamente uma coisa ruim. O WPF inaugurou uma era de interfaces completamente não nativas. Difícil de entender e ainda mais difícil de olhar. O que uma pessoa acha bonita é o pior pesadelo de outra pessoa. Deixar a aparência dos controles internos do sistema operacional é uma maneira fantástica de fazer todos felizes. Por outro lado, recuso-me a usar as versões mais recentes do Office porque não consigo suportar a interface. Então, saia do meu gramado e outras coisas.
Cody Grey

1
Eu diria que isso é um pouco subjetivo. Provavelmente, eu não gostaria que meu Word Pocessor viesse todas essas regras, mas alguns softwares podem se safar. Por exemplo. um dos melhores exemplos de WPF que me lembro de ter visto foi o Yahoo - para mim, isso é uma grande melhoria em um aplicativo baseado em widget do Windows: blogs.msdn.com/cfs-filesystemfile.ashx/__key/…
Danny Tuppeny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.