TOC

This article has been localized into Danish by the community.

Om WPF:

WPF vs. WinForms

I sidste kapitel talte vi om hvad WPF er, samt en smule om WinForms. I denne artikel vil jeg forsøge at sammenligne de to, for selvom at de tjener samme formål, så er der en MASSE forskelle. Hvis du aldrig har arbejdet med WinForms før, og især hvis WPF er det første GUI framework du kaster dig over, så kan du godt springe denne artikel over - med mindre du er nysgerrig på hvad forskellene rent faktisk er.

Den klart største forskel imellem WinForms og WPF er det faktum at imens WinForms blot er et avanceret lag henover de kontroller der allerede findes i Windows (fx en TextBox), så er WPF opbygget helt fra bunden af og er ikke afhængig af det der følger med Windows i næsten alle situationer. Det kan måske virke som en lille forskel, men det er det virkelig ikke, hvilket du helt klart vil lægge mærke til hvis du nogensinde har arbejdet med et framework der er afhængig af Win32/WinAPI.

Et godt eksempel på dette er en knap med et billede og noget tekst på. Dette er ikke en standard Windows kontrol, så WinForms tilbyder ikke denne mulighed fra start af. I stedet skal du selv til tegne billedet på en knap, implementere en knap der understøtter billeder eller bruge en 3. parts kontrol. Med WPF derimod kan en knap indeholde hvad som helst, for det er i princippet bare en "kant" med forskelligt indhold og tilstande (fx uberørt, under musen (hover) eller trykket-ned). WPF knappen er som standard "uden udseende", ligesom de fleste andre WPF kontroller, hvilket betyder at du uden videre kan bruge andre kontroller inde i dem. Kunne du fx tænke dig en knap med både billede og tekst? Så putter du bare en Image kontrol og en TextBlock kontrol ind i en Button kontrol! Den samme slags fleksibilitet finder du ganske enkelt ikke med WinForms, hvilket også er årsagen til at der et et stort marked for helt simple kontroller som fx knapper med billeder på osv.

Ulempen ved denne fleksibilitet er at nogen gange tager det længere tid at opnå noget som var super let med WinForms, ganske enkelt fordi at du forsøger at opnå netop det som den tilsvarende Windows kontrol blev skabt til. Det er i hvert fald ofte sådan det kan føles i starten, hvor du finder dig selv i gang med at lave semi-komplekse templates til dit WPF ListView med et billede og noget tekst der står pænt justeret, for at opnå det samme som WinForms ListView'et bare gør helt af sig selv.

Dette er blot en af forskellene, men efterhånden som du arbejder mere og mere med WPF vil det gå op for dig at dette er den primære grund til en lang række andre forskelle - WPF gør simpelthen bare tingene på sin helt egen måde, på godt og ondt. Du er ikke længere afhængig af at tingene skal gøres på "Windows måden", men for denne store fleksibilitet betaler du med at skulle arbejde lidt mere med WPF når "Windows måden" netop er det du ønsker dig.

Følgende er en totalt subjektiv liste over fordelene ved henholdsvis WPF og WinForms. Den skulle gerne give dig en bedre idé om hvad du er gået ind til ved eventuelt at vælge WPF.

Fordele ved WPF

  • Det er nyere og dermed også bedre indrettet i forhold til de nuværende standarder
  • Microsoft bruger det selv til en række nye applikationer, fx Visual Studio
  • Det er mere fleksibelt, så du kan gøre flere ting uden at du er nødt til at skrive eller købe nye kontroller
  • Når du endelig skal bruge tredjeparts kontroller, så vil udviklerne af disse kontroller højst sansynligt fokusere mere på WPF fordi det er nyere
  • XAML gør det lettere at skabe og redigere din GUI og tillader arbejdet at blive opdelt mellem en designer (XAML) og en programmering (C#,VB.NET osv.)
  • Databinding som tillader dig at få en mere ren adskillelse af data og layout
  • Den benytter hardwaren (da: isenkram'et, dvs. computerens indbyggede teknik) til at tegne en GUI, som giver en bedre udførelse.
  • Den tillader dig af benytte brugerinterface til både Windowsapplikationer og webapplikationer (Silverlight/XBAP)

Fordele ved WinForms

  • Det er ældre og dermed mere gennemprøvet
  • Der er allerede masser af 3. parts kontroller som du kan købe eller endda bruge gratis
  • Designeren i Visual Studio er stadig, imens dette skrives, bedre for WinForms end for WPF, hvor du med sidstnævnte skal klare mere af arbejdet selv