TOC

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

About WPF:

WPF vs. WinForms

В предишната глава говорихме малко за WinForms и какво е WPF. В тази глава ще се опитам да ги сравня, защото ,въпреки че служат за едно и също има огромни разлики между тях. Ако никога досега не сте работили с WinForms и още повече ако WPF е вашият първи GUI framework, можете да изпуснете тази глава, но ако ви интересуват разликите тогава продължавайте да четете.

Единствената най-голяма разлика между WinForms и WPF е фактът, че WinForms e слой върху стандартните Windows контроли (например TextBox), а WPF е изграден от нулата и не разчита на стандартните контроли в почти всички случаи. Това може да звучи като тънка разлика, която в действителност не е, и която със сигурност ще забележите,ако някога сте разботили с framework, който зависи от Win32/WinAPI.

Много добър пример за това е бутон с изображение и текст върху него. Това не е стандартен Windows контрол - WinForms не ви предлага такава готова възможност. В место това ще трябва да нарисувате изображението сами, да създадете бутон, който поддържа изображения сами или да използвате контрол от 3то място. С WPF един бутон може да съдържа всичко, защото всъщност е очертание със съдържание и различни състояния (например untouched,hovered, pressed). WPF бутонът няма лице, както са и останалите WPF контроли, което означава,че в себе си можед а съдържа други контроли в себе си.. Искате бутон с изображение и текст? Просто сложете Image и TextBlock контроли вътре в бутона и сте готови! Не можете да получите такава гъвкавост от стандартните WinForms контроли, заради което има голямо търсене за по-скоро прости имплементации на контроли като бутони с изображения и т.н.

Недостатък от тази гъвкавост е, че понякога ще трябва да работите повече, за да постигнете нещо, което е много лесно в WinForms, защото е било създадено за случаят , за който ви трябва. Поне в началото така се усеща, когато ще се видите да създавате шаблони, за да направите ListView с изображение и добре подравнен текст. Нещо, което ListViewItem в WinForms прави в един единствен ред код.

Това беше само една разлика, но докато работите с WPF ще разберете, че всъщност това е основната причина за още толкова много други разлики - WPF просто прави нещата по свой си начин, за добро или за лошо. Вече няма да сте ограничен да правите нещата по Windows начина, но за да получите тази гъвкавост, ще трябва да поработите малко повечко, когато искате да направите нещата по Windows начина.

Следващият списък с основните преимущества за WPF и WinForms е напълно субективен. Той би ви дал по-добра идея с какво се захващате.

Преимущества на WPF

  • По-нов и следователно по-близък до текущите стандарти.
  • Microsoft го използва за много от новите си програми, например Visual Studio.
  • По-гъвкав, така, че може да напарвите повече неща без да трябва да пишете или купувате нови контроли.
  • Когато наистина ви трябва контрол от трета страна, разпработчиците на тези контроли най-вероятно ще са по-фокусирани върху WPF, тъй като е по-нов.
  • XAML спомага за лесното създаване и редактиране на потребителския интерфейс и позволява работата да бъде разделена между дизайнера (XAML) и програмиста (C#,VB.NET и т.н.)
  • DataBinding - позволява ви по-ясното разделение между данни и оформление.
  • Използва хардуерното ускорение за рисуване на потребителския интерфейс, за по-добра производителност.
  • Позволява ви да създадете потребителски интерфейси за Windows програми и уеб приложения (Silverlight/XBAP).

Преимущества на WinForms

  • По-стар и следователно повече използван и тестван.
  • Има много контроли от трети страни, които може да купите или вземете безплатно.
  • Дизайнера за писане на WinForms във Visual Studio продължава да е по-добър от този за WPF, където ще трябва да правите повечето неща сами.