TOC

This article is currently in the process of being translated into Catalan (~99% done).

About WPF:

WPF vs. WinForms

En l'anterior capítol, hem parlat sobre que és WPF i una mica sobre els WinForms. En aquest capítol intentarem comparar els dos ja que encara que els dos serveixen pel mateix propòsit, hi ha MOLTES diferencies entre els dos. Si mai heu treballat amb WinForms, i WPF és el vostre primer GUI framework, podeu saltar aquest capítol, però si esteu interessats continueu llegint.

La principal i més important diferència entre WinForms i WPF és que mentre WinForm és simplement una capa a sobre dels controls l'estàndard de Windows (per exemple un TextBox), WPF està construït des de la base i no confia amb els controls estàndard del Windows en totes les situacions. Aquesta és una gran diferencia, però no la única que notarem si ja heu treballat amb algun framework que depèn de Win32/WinAPI

Un gran exemple d'això és un botó amb una imatge i text dins d'ell. Aquest no és un control estàndard de Windows, raó per la qual WinForms no ofereix aquesta possibilitat immediatament. En el seu lloc, ho haureu de dibuixar vosaltres mateixos, implementant el botó pròpiament per tal que admeti imatges o actualitzant un control de tercers. Amb WPF, un botó pot contenir qualsevol cosa, ja que és essencialment una bora amb un contingut i diversos estats (per exemple, intacte, inhabilitat, pressionat). El botó WPF és "sense aspecte", així com la majoria d'altres controls WPF, el que significa que pot contenir un rang d'altres controls dins d'ell. Voleu un botó amb una imatge i text? Simplement heu de col·locar la imatge i un control TextBlock dins del botó i fet! Amb WinForms simplement no s'obté aquest tipus de flexibilitat amb els controls estàndard, pel que existeix un gran mercat d'implementacions bastants simples de controls com botons amb imatges, etc...

L'inconvenient d'aquesta flexibilitat és que a vegades s'haurà de treballar més per a obtenir quelcom que era molt fàcil amb WinForms, ja que aquests van ser creats per a l'escenari simple. Almenys aquesta és la percepció que es té inicialment, quan hem de crear plantilles per a realitzar un ListView amb una imatge i un text molt ben alienat, cosa que amb el ListViewItem de WinForms es feia en una sola línia de codi.

Aquesta és només una diferència, però a mesura que treballeu amb WPF us donareu compte de la raó subjacent de moltes altres diferencies: WPF simplement realitza les coses a la seva manera, per a bé o per a mal. Ja no s'està obligat a fer coses a l'estil de Windows, però per obtenir aquest tipus de flexibilitat es requereix una mica de treball quan només es busca fer les coses a l'estil Windows.

La següent llista és una llista subjectiva de les avantatges de WPF i Winforms. Pot donar una idea millor del que fan cadascuna.

Avantatges de WPF

  • És més nou i per tant està més en consonància amb els estàndards actuals
  • Microsoft ho està utilitzant en moltes noves aplicacions, per exemple Visual Studio
  • És més flexible, així es pot fer més coses sense tenir la necessitat d'escriure o comprar nous controls
  • És probable que quan es necessiti utilitzar controls de tercers, els desenvolupadors d'aquests controls s'enfoquin més en WPF ja que és més recent.
  • XAML fa que sigui més fàcil crear i editar les vostres GUI, i permet que el treball es divideixi entre un dissenyador (XAML) i un programador (C#, VB.net etc.)
  • L'enllaç de dades (Databinding), permet obtenir una separació més neta de les dades i el disseny.
  • Utilitza l'acceleració de maquinari per a dibuixar la GUI. D'aquesta forma s'obté millors rendiments.
  • Permet realitzar interfícies d'usuari tant per a aplicacions Windows com per a aplicacions web (Silverlight/XBAP)

Avantatges dels WinForms

  • Té més temps per tant ha estat més utilitzat i provat
  • Ja hi ha molts controls d'empreses de tercers que pots comprar o aconseguir gratuïtament
  • El dissenyador en Visual Studio, en quan escriptura de codi, continua essent millor per a WinForms que per a WPF, on s'ha de fer més treball amb WPF