TOC

This article has been localized into Portuguese by the community.

Sobre WPF:

WPF vs. WinForms

No capítulo anterior, nós falamos sobre o que é WPF e um pouco sobre WinForms. Neste capítulo, eu irei tentar comparar os dois, apesar de que eles servem para a mesma proposta, há uma grande diferença entre eles. Se você nunca trabalhou com WinForms antes, e especialmente se WPF é seu primeiro framework GUI, você pode pular este capítulo, mas se você estiver interessado nas diferenças então leia.

A primeira e mais importante diferença entre WinForms e WPF é o fato de que enquanto o WinForms é simplesmente uma camada superior dos controles padrões do Windows (por exemplo um TextBox), WPF é construído desde o esboço e não depende dos controles padrões do Windows em quase nenhuma situação. Isto pode parecer uma diferença sutil, mas realmente não é, o que você irá notar definitivamente se você tem trabalhado com um framework que depende do Win32/WinAPI.

Um grande exemplo disso é um botão com uma imagem e texto dentro. Isso não é um controle padrão do Windows, então WinForms não te oferece a possibilidade fora da caixa. Ao invés disso você terá que desenhar a imagem você mesmo, implementar seu próprio botão que suporte imagens ou use um controle de terceiros. Com WPF, um botão pode conter qualquer coisa porque ele essencialmente é uma borda com conteúdo e vários estados (ex: intocado, focado, pressionado). O botão do WPF é "sem aparência", como a maioria dos outros controles WPF, o que significa que ele pode conter uma série de outros controles dentro dele. Você quer um botão com uma imagem e algum texto? Basta colocar um Image e um controle TextBlock dentro do botão e pronto! Você simplesmente não tem esse tipo de flexibilidade nos controles padrões do WinForms, é por isso que existe um grande mercado para implementações de controles como botões com imagens e por ai vai.

A desvantagem dessa flexibilidade é que algumas vezes você terá que trabalhar duro para conquistar algo que era muito fácil com WinForms, porque era criado justamente para o cenário que você precisava. Pelo menos é assim que se sente no começo, quando você se vê criando templates para fazer uma ListView com uma imagem e algum texto bem alinhado, algo que com WinForms fará em uma única linha de código.

Esta é apenas uma diferença, mas como você com WPF, você perceberá que isso é de fato a razão fundamental para muitas outras diferenças - WPF está simplesmente como fazer as coisas do seu próprio jeito, seja para melhor ou para pior. Você não está restringido o tempo todo a fazer coisas do jeito do Windows, mas para ter esse tipo de flexibilidade, você paga com um pouco mais de trabalho quando você realmente procura fazer coisas do jeito do Windows.

A seguinte lista é completamente subjetiva das principais vantagens do WPF e do WinForms. Isso deve te dar uma ideia melhor.

Vantagens do WPF

  • É novo e portanto mais de acordo com os padrões atuais
  • A Microsoft está usando-o para uma porção de novas aplicações, por exemplo o Visual Studio
  • É mais flexível, então você pode fazer mais coisas sem ter que escrever ou comprar novos controles
  • Quando você precisar usar controles de terceiros, os desenvolvedores desses controles provavelmente estarão mais focados em WPF porque ele é mais novo
  • XAML torna mais fácil criar e editar sua GUI, e permitirá o trabalho ser divido entre um designer (XAML) e um programador (C#, VB.NET etc.)
  • Databinding, te permite ter uma separação mais clara do dado e layout
  • Usa aceleração do hardware para desenhar a GUI, para melhor desempenho
  • Ele te permite criar interfaces de usuário tanto para aplicações Windows quanto para aplicações web (Silverlight/XBAP)

Vantagens do WinForms

  • Mais velho e portanto mais experimentado e testado
  • Já existem um monte de controles de terceiros que você pode comprar ou conseguir de graça.
  • O designer no Visual Studio ainda é, através de escrita, melhor para o WinForms do que para o WPF, onde você terá mais trabalho à fazer você mesmo com WPF
This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!