This article has been localized into Portuguese by the community.
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 foi apenas uma diferença, mas ao trabalhar com WPF, você irá descobrir que esta é a principal razão para muitas das outras diferenças - WPF é apenas fazer as coisas da sua própria maneira, para melhor ou para pior. Você não está mais restrito a fazer as coisas à maneira do Windows, mas ao obter este tipo de flexibilidade, você paga com um pouco mais de trabalho quando estiver apenas procurando fazer as coisas da maneira do Windows.
A seguir há uma lista completamente subjetiva das principais vantagens do WPF e do WinForms. Isto deve dar a você uma ideia melhor do que há pela frente.
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
- Afar
- Afrikaans
- Albanian
- Arabic
- Bulgarian
- Catalan
- Chinese
- Croatian
- Czech
- Danish
- Dutch
- Finnish
- French
- German
- Gujarati
- Hebrew
- Hindi
- Hungarian
- Indonesian
- Italian
- Japanese
- Kannada
- Korean
- Lithuanian
- Macedonian
- Norwegian Bokmål
- Persian
- Polish
- Portuguese
- Romanian
- Russian
- Serbian
- Slovak
- Slovenian
- Spanish
- Swedish
- Tamil
- Thai
- Turkish
- Ukrainian
- Uzbek
- Vietnamese