Visual C# — WPF ? a co to ma być ??

Visual C# — WPF ? a co to ma być ??
Razem głosów: 7 co stanowi: 85.71% całości.

c sharp love

 

Przed następnym pisaniem należałoby wykonać podstawową funkcję w naszym C# :

Albowiem programiści są niczym maszyny przetwarzające kofeinę w kod źródłowy :) Dlatego też skoro mamy  kawkę  zajmiemy się ……

No tak do tej pory pisaliśmy nasze aplikacje używając przede wszystkim  standardowych formularzy Windows czyli CRL, ale przecież jest w naszym C# coś więcej poza CLR i Console …. mianowicie  WPF  .

No tak .. jest i co nas to obchodzi ? Na co nam to ??  — Takie się wam pewnie pytania nasuwają niemniej w tym arcie postaram się to właśnie wyjaśnić.  Tak więc do roboty…

imgres

— WPF ?? , a co to takiego ??

WPF rozumiemy jako skrót od  Windows Presentation Foudation  …

— no tak zaś M$ się nudził i coś nam wciska :)

–Ale na pewno słyszeliście o WPF co? ??

— No ba słyszało się że to jakieś biblioteki ramek, czy element podsystemu zestawu kontroli czegoś tam….

Hmm..  no to niewiele faktycznie, dobrze więc  postaram się to nieco przybliżyć …. Najprościej mianowicie zrozumieć WPF  jeśli pomyślimy o nim jak o zestawie obiektów, które znacznie ułatwiajś nam budowanie atrakcyjnych interfejsów użytkownika.

To co nam daje „magazyn” WPF to przede wszystkim zestaw kontrolek całkiem nowych, niektóre zastępują nasze znane z WindowsForm (label, TextBox, Button , Slide) dostajemy wiele nowych kontrolek świadczących nowe funkcje np:

  • Expander
  • FlowDocument
  • ViewBox

Przykład okienka WPF naszej Aplikacji:

XFrameStyle_RoundMonitor

Oczywiście to nie wszystko. WPF zawiera całe mnóstwo  nowych obiektów  do zarządzania animacjami, wydarzeniami, stylami, szablonami, oraz szeregiem innych nowych funkcji, które jeśli będzie zainteresowanie opiszę.

Tymczasem skupmy się na WPF jako takim samym sobie:

Aplikacje WPF mogą działać w kilku środowiskach – jest to pewne nowum w porównaniu do CLR .  Widzicie możemy uruchomić ją na pulpicie  jak zwykłą aplikację opartą o system formularzy Windows, ale można też uruchomić ją w przeglądarce internetowej jako  XAML Browser Application (XBAP). Aplikacje WPF możemy też uruchomić jako aplikację ramki wewnątrz innej ramki, która działa na wzór swego rodzaju zwykłej przeglśdarki internetowej. Wreszcie  możemy wykonać aplikację SilverLight.

SilverLight jest takim trochę ograniczonym WPF, ale działa on całkowicie wewnątrz przeglądarki, można powiedzieć, że SL działa jak zwykła strona internetowa, ale korzysta z wielu funkcji oferowanych przez WPF. Zresztą sami zobaczcie przykładową stronę wykonaną w technologi SilwerLight:

http://mars.jpl.nasa.gov/msl/multimedia/interactives/photosynth/

 

—- XAML ??  a to znów co ??

O…. łapiesz mnie przyjacielu za słówka , ale to dobrze,  że o to pytasz :)

XAML  mówimy „zammel” oznacza tyle co „eXtensible Application Markup Language” i jak pewnie dostrzegłeś ma wiele wspólnego z XML. Bo w zasadzie stanowi jego rozszerzenie wymyślone przez  Microsoft w celu reprezentowania interfejsów użytkownika (UI)  WPF w prostym statycznym języku podobnym do HTML. XAML określa specjalne tokeny do reprezentacji okna , zasobów, styli i innych obiektów WPF.

glassbutton

Program może korzystać z pliku zawierającego kod XAML i załadować interfejs użytkownika (UI), podobnie przeglądarka, który jest w XAML zdefiniowana. Tymczasem prawdziwy kod w Visual C# pracuje w tle i obsługuje zdarzenia występujące podczas interakcji z użytkownikiem oraz wykonuje procedury programu właściwego. Takie rozwiązanie często się nazywa  „code-behind” …

 


Code_behind — (kod z opóźnieniem — jakoś to tłumaczenie brzmi dziwnie)

codebehind

polega na tym, że kod odpowiedzialny za warstwę prezentacji jest oddzielony od kodu odpowiedzialnego za logikę. Ten pierwszy jest przechowywany w pliku .xaml i opisuje interfejs graficzny,  a drugi jest w  .cs  i zawiera wszystko inne jak obsługa zdarzeń onClick itd.


 

Użycie plików XAML zdecydowanie rozdziela UI od kodu. Wizja Microsoftu wydająca się być szalonem pozwala by projektant interfejsu użytkownika (np. grafik z doświadczeniem projektowym)  zbudował UI, a następnie programista dodał swój code-behind :)

Tak wygląda to pięknie, ale w praktyce podział nie jest aż tak wielki jak mogłoby się wydawać, ponadto  nie da się sprawdzić UI bez kodu i odwrotnie. Dodatkowo tak naprawdę niewiele firm  zatrudnia osobno projektantów UI i programistów. Więc tak naprawdę ułatwienie pozostaje tylko wizją i kwestia sporną.

newglassbutton.jpg-500x375

Dodatkowo używając Visual Studio do tworzenia aplikacji WPF , XAML jest automatycznie ładowany do projektu i zarówno projekt UI jak i kod możemy zrobić sami gdyż VS pozwala nam edytować XAML ręcznie , ale w większości przypadków podczas pracy z VS czy też  Expression Blend generuje go samodzielnie za nas co znacznie ułatwia prace nad UI i programem. Możemy też łączyć pracę w VS i Expression Blend.  Choć są przypadki szczególne gdy ani EB i VS nie mogą wygenerować kodu XAML i wtedy pozostaje nam tylko ręczna edycja kodu XAML – ale to te nie jest takie straszne jak się wydaje.

xaml-code-for-creating-wpf-checkedlistbox-control

Wszystkie zwykłe zasady mają zastosowanie do formatu XML XAML. Ze szczegółów pliki XAML muszą mieć jeden element główny, który zawiera wszystkie inne elementy w pliku. Zwykle elementem głównym jest okno (odpowiednik formularza CLR) lub ramka. Ponadto kontrola OKNA  może zawierać tylko jednego potomka, który jest zwykle rodzajem kontenera takim jak np: siatka, StackPanel ….

— Hmm  to jakich potrzebujemy narzędzi do tego wszystkiego ??

W sumie to wszystko co potrzebujemy zawarte jest w Visual Studio,  ponadto WPF designer jest bardzo podobny do znanego nam wcześniej  WindowsForm designera. Możemy tez używać własnych ToolBoxów w oknach WPF i w podobny sposób ustawiać właściwości Formantów.

Dodawanie kodu jest też podobne do sposobu w jaki dodawaliśmy kod obsługi zdarzeń dla aplikacji WindowsForm (CLR). Wystarczy kliknąć dwukrotnie na obiekcie i tym samym otworzyć edytor kodu lub  użyć okna właściwości.  Jeśli więc masz przyjacielu doświadczenie z Windows Form  nie będziesz miał kłopotów z WPF i bardzo szybko zbudujesz własne interfejsy oparte o WPF.

Ale przybliżę też Ci narzędzia dedykowane …..

blend1

Expression Blend:

Jest narzędziem stworzonym specjalnie na potrzeby tworzenia i projektowania interfejsów  WPF. Działa w zasadzie tak jak VS w oknie projektanta WPF.  Mimo iż wydaje się być zmorą pomieszaną z poplątaniem …. tak złośliwy Mikrosoft:

Blend

Jednak szybko się go daje ogarnąć i używać, zresztą jest bardzo podobny do VS .

expression_blend_3_01

 

Expression Blend oferuje ponadto kilka przydatnych funkcji których nie znajdziemy w Visual Studio, mianowicie takich jak np. nagrywanie właściwości animacji … Ale musimy pamiętać, że Expression Blend jest dosyć drogi, a VS w wersji Express z namiastką EB mamy gratis.

Niemniej moim skromnym zdaniem połączenie  Visual Studio (do pisania kodu) i Expression Blend (do projektowania UI, tworzenia animacji)   tworzy najlepsze środowisko do pracy z aplikacjami WPF.

Choć bez względu na to czego używamy , często zachodzi konieczność ręcznej edycji kodu XAML gdyż jest po prostu szybsze niż szukanie jak to zrobić w EB :) Pomimo że wygodnie zrobić możemy w EB i VS w WPF Designerze  podobnie jak dla WindowsForm CLR  dla naszej Aplikacji WPF , to są chwile kiedy wolę bezpośrednio po prostu zmienić coś ręcznie w kodzie XAML ….

scene_wpf_small

— No tak ale pewnie WPF ma jakieś wady ??

Tak …. doszliśmy do tego niezręcznego miejsca w każdym tekście czy rozmowie, ale taka jest prawda — nic nie jest doskonałe  tak też i w tym wypadku.

1357536036

Stosowanie WPF daje nam wiele korzyś?ci  np. takich jak:

  • Lepsze wykorzystanie sprzętu graficznego…., WPF jest wzorowany na DirectX co zapewnia lepszy dostęp do sprzętu graficznego niż starsze procedury GDI i GDI+. Ułatwia przekształcanie przedmiotów, animacji oraz obiektów 3D. Pozwala też uzyskać w aplikacji proste efekty graficzne np. wytłaczanie, cienie.
  • Zatrzymanie Grafiki  ….  To swego rodzaju konsekwencja poprzedniego, ale zasługuje na opisanie. Jeśli narysujemy coś (wiersz, przycisk, obraz, czy cokolwiek) w WPF tworzymy obiekt. A obiekt rysuje się w miarę potrzeb. Co w praktyce oznacza że nie musimy robić rysunku w obsłudze zdarzenia Paint. Oznacza też to, że możemy przekształcić obiekt bez utraty rozdzielczości.  Czyli możemy powiększyć na łukach, fragmentach tekstu i zostanie obiekt w HR bez ziarnistości.
  • Wiązanie lokalne animacji ….  Możemy animować właściwość np: lokalizację , wielkość, color itd.   w czasie…
  • Dziedziczenie właściwości ….  Większość kontrolek dziedziczy wartości właściwości nadrzędnych w kontenerach. Dzięki czemu łatwo możemy zmieniać kolory czcionek lub inne właściwości poprzez zmianę właściwości kontenera.
  • Style …. zapewniają pakiet wartości dzięki którym możemy kontrolować poszczególne kontrolki lub wszystkie naraz , np. możemy zdefiniować wielkość , czcionki , kolory … itd. dla wszystkich przycisków w naszym oknie
  • Szablony ….  pozwalają na zmianę elementów, które są używane do tworzenia innych formantów, np.  przycisk normalnie jest prostokątny, ale możemy sobie zdefiniować oparty o kształt elipsy czy inny dowolny.
  • Oddzielny UI i kod …  jak wspominałem grafik może wykonać oszałamiający UI , zanim napiszemy do niego kod .. ale niestety wadą jest brak możliwości testowania osobno UI i Kodu …
  • Programowanie deklaratywne …. Wielu zachwala nowe możliwości korzyści płynące z programowania deklaratywnego, gdzie można używać kodu statycznego, zdefiniować UI i jego zachowanie, zamiast pisania kodu … ma to sens faktycznie ale pod warunkiem, że UI jest osobnym kodem, a czy jest to korzystne dla kodu  gdy trzeba wykonać kompleksowe działania w odpowiedzi na zdarzenia ?? Tak …

WPF  poza zaletami i korzyściami , których kilka wymieniłem ma też to co nieuniknione czyli wady, które mogą w niektórych przypadkach mieć wpływ na decyzję używania WPF zamiast CLR w naszych aplikacjach, a oto kilka istotniejszych z nich:

  • Krzywa uczenia się ….  Nie musimy zapominać wszystkiego co wiemy o programowaniu w .NET, a w szczególności kod zdarzeń , ale musimy sobie przyswoić mnóstwo nowych rzeczy niepodobnych  do niczego wcześniejszego…
  • Brakujące elementy sterujące  …. w WPF wielu rzeczy brakuje , niema też sporej ilości kontrolek do których przywykliśmy np: DateTimePicker , MounthCallendar, PropertyGrid czy ulubiony BackgroundWorker.
  • Niespójność kodu ….  Mimo, że WPF wydaje się posiadać bardziej spójny model obiektowy niż WindowsForm (CLR) jak się okazuje niestety tylko w pewnym sensie, gdyż jest sprzeczny z wszystkim innym np:  właściwość dziedziczenia nie zawsze działa zgodnie z planem i zachowuje się inaczej niż można by się spodziewać.
  • Niekorzystny ….  Często się okazuje, że zarówno projektant okien WPF w VS czy EB nie są tak dobre jak stary poczciwy WindowsForm Designer dla CLR do niektórych zastosowań i zadań … choć powoli się to zmienia na lepsze i z czasem pewnie CLR zniknie całkowicie z VS
  • Brak niektórych funkcji EB w Visual Studio …  Jak wspominałem w Expression Blend jest kilka funkcji, których nie znajdziemy w VS ….  oczywiście M$ traktuje  to jako powód by nakłonić developerów do zakupu Expression Blend :)

Podsumowując ….  

WPF zawiera narzędzia, które pozwalają budować niezwykle atrakcyjne aplikacje  mogące wchodzić w lepszą i na wyższym poziomie interakcję z użytkownikiem. Nowy sposób interakcji zapewniają animacje i nowy wygląd nie wymagające pisania dużych ilości kodu. Ponadto  nasze aplikacje mogą pracować w oknie przeglądarki na kilka sposobów w tym XBAP lub z użyciem technologi SilverLight.

Funkcje takie jak: Style , szablony i promowana spójność pozwala na łatwe zmiany wyglądu i zachowania UI. Co wśród młodych programistów cieszy się furorą ….

Jednak najwiąkszą wadą WPF jest wspomniana krzywa uczenia się, jest stosunkowo stroma i choć nie trzeba zaczynać od zera szczególnie jeśli chodzi o samo pisanie kodu, ale by uzyskać ciekawe i powalające na ziemię efekty  trzeba będzie poświęcić wiele czasu i zdobyć sporo doświadczenia. Nawet po sporej praktyce, budowanie aplikacji WPF bśdzie trwać dłużej niż porównywalnej w CLR. Co ciekawe prawdopodobnie nie 2 razy dłużej jak myślisz , ale wystarczająco długo by rozważyć użycie WPF  w naszej aplikacji.

Niektórzy developerzy namawiają do używania WPF  we wszystkich aplikacjach, inni są zadowoleni że jeszcze można używać starego CLR, ja osobiście mam na razie mieszane uczucia i choć stosuję WPF w poważniejszych aplikacjach to w prostych programikach nadal preferuję WindowsForm (CLR). Niemniej uważam iż każdy powinien wiedzieć co? więcej o WPF i być świadom faktu, że kiedyś zastąpi CLR i że mimo wszystko warto spróbować i się go nauczyć.

To na tyle zanim zaczniemy przykładowe aplikacje w WPF tworzyć :)

 

 

 

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay