TOC

This article has been localized into Polish by the community.

O WPF:

WPF vs. WinForms

W poprzednim rozdziale omówiliśmy czym jest WPF oraz zachaczyliśmy o WinForms. W tym natomiast, postaram się porównać obie technologie, ponieważ mimo, że spełniają tę samą funkcję, są miedzy nimi WIELKIE różnice. Jeżeli nigdy dotąd nie miałeś okazji pracować z technologią WinForms, oraz szczególnie jeżeli WPF to Twój pierwszy farmework GUI, możesz pominąć ten rozdział, ale jeśli interesują cię różnice między nimi, to zapraszam do dalszej lektury.

Najważniejszą różnicą między WinForms i WPF jest to, że podczas gdy Winforms jest jedynie warstwą korzystającą ze standardowych Windowsowych kontrolek (np. Textbox), WPF jest zbudowany od zera i nie polega na standardowych windowsowych kontrolkach w niemal wszystkich sytuacjach. To może wyglądać na subtelną różnicę, jednak, ale taką nie jest co z pewnością zauważysz, jeśli wcześniej pracowałeś z frameworkami polegającymi na Win32/WinAPI.

Dobrym przykładem tego jest przycisk, który zawiera w sobie grafikę i tekst. Nie jest to standardowa kontrolka systemu Windows, więc WinForms nie oferuje możliwości utworzenia przycisku z taką zawartością bez odrobiny gimnastyki. Żeby uzyskać taki efekt należałoby narysować obraz samemu, zaimplementować własny przycisk który wspiera grafiki w stojej zawartości lub użyć kontrolki z zewnętrzego źródła. W WPF, przycisk może w gruncie rzeczy zawierać cokolwiek, ponieważ jest w istocie jedynie ramką (eng. border) z zawartością oraz różnymi stanami (np. wzkazującymi czy jest wciśnięty, czy znajduje się nad nim mysz etc.). Przycisk w WPF, jak i większość innych kontrolek jest "look-less" - to znaczy: pozbawiony wyglądu. Wynikowo oznacza to, że może zawierać w sobie zbiór innych kontrolek wewnątrz siebie. Chcesz przycisku z obrazkiem i jakimś tekstem? Po prostu wstaw kontrolkę Image (obraz) i TextBlock do wnętrza przycisku i po robocie! W standardowych kontrolkach Winforms zwyczajnie nie masz dostępu do elastyczności tego poziomu. Z tego powodu istnieje duży rynek dla raczej prostych implementacji kontrolek, takich jak przyciski z obrazami.

Mankamentem tej elastyczności jest fakt, że czasem będziesz musiał poświęcić więcej pracy aby osiągnąć coś, co byłoby proste w WinForms, ponieważ zostało stworzone wyłącznie do zastosowania, do którego jest Ci potrzebne. Przynajmniej takie odnosi się wrażenie na początku, gdy tworzysz szablony (template) do ListView, tak, aby jego pozycje miały dołączone obrazki i ładnie wyrównany tekst - coś co WinForms'owe ListViewItem potrafi pokazać za pomocą jednej linii kodu.

To zaledwie jedna różnica, ale w miarę pracy z WPF zdasz sobie sprawę że jest to zasadniczy przyczynek wielu innych różnic - WPF zwyczajnie robi rzeczy po swojemu, na dobre, czy na złe. Nie jesteś już ograniczony do robienia wszystkiego na Windowsową modłę, ale aby osiągnąć taką elastyczność płacisz większym nakładem pracy, jeżeli w gruncie rzeczy chcesz wszystko zrobić w stylu Windowsa.

Poniżej znajduje się całkowicie subiektywna lista głównych zalet technologii WPF i WinForms. Powinna dać ci lepsze wyobrażenie o różnicach jakie dzielą te dwa rozwiązania.

Zalety WPF

  • Nowszy, a zatem zgodniejszy z obecnymi standardami.
  • Używany przez Microsoft w wielu nowych aplikacjach, m.in. Visual Studio.
  • Elastyczniejszy, więc możesz zrobić więcej bez konieczności pisania lub zakupu nowych kontrolek.
  • Kiedy będziesz musiał użyć kontrolek z zewnętrzych źródeł, ich twórcy będą raczej skupieni na WPF, ponieważ jest nowszy.
  • XAML sprawia, że tworzenie i edycja GUI jest łatwiejsze oraz pozwala pracę na rozdzielenie między designera (XAML) a programiste (C#, VB.NET etc.)
  • Databinding, dzięki któremu możesz osiągnąć jasną separację danych i wyglądu.
  • Używa przyspieszenia sprzętowego do rysowania GUI, co poprawia wydajność.
  • Umożliwia tworzenie interfejsów użytkownika zarówno do aplikacji Windowsowych jak i webowych (Silverlight/XBAP).

Zalety WinForms

  • Jest starszy, a zatem bardziej dojrzały.
  • Istnieje do niego już wiele zewnętrznych kontrolek które możesz zakupić lub uzyskać za darmo.
  • W czasie pisania tego tekstu designer dla WinForms jest wciąż lepszy od tego dla WPF, w którym wciąż trzeba wykonać więcej pracy dla osiągnięcia tego samego efektu.