Wygląd w 2D i 3D

Nowa biblioteka Windows Presentation Foundation umożliwia tworzenie skomplikowanych interfejsów z elementami 2D, 3D, animacjami i mechanizmami automatycznego importu danych.

Nowa biblioteka Windows Presentation Foundation umożliwia tworzenie skomplikowanych interfejsów z elementami 2D, 3D, animacjami i mechanizmami automatycznego importu danych.

Organizacja graficznego interfejsu Windows od dawna opierała się na podstawowych założeniach - dostępne było okno z tzw. uchwytem i kolejką komunikatów, które służą do informowania o wszelkich zdarzeniach typu zmiana rozmiaru, ruch myszy itp. Kontrolka umieszczana na formatce jest także de facto oknem z podobnymi mechanizmami komunikacji. Windows Presentation Foundation (WPF) bazuje na zupełnie innych zasadach. Po pierwsze, obiekty graficzne nie mają uchwytów okien i są po prostu rysowane (grafika wektorowa). Nie zajmują więc tzw. zasobów systemowych. System zdarzeń, który w Windows Forms czeka na komunikaty z systemu operacyjnego w WPF, jest czystym mechanizmem wykorzystującym zdarzenia i delegaty z .Net 3.0. Wszystko to sprawia, że bez problemów można tworzyć aplikacje, gdzie kilka różnych wątków równolegle uaktualnia interfejs użytkownika. WPF używa tego mechanizmu także wewnętrznie, np. do realizacji animacji.

Interfejs z bajerami

Wygląd w 2D i 3D

WPF - architektura

Przy tworzeniu interfejsu użytkownika wykorzystana została koncepcja podobna do stosowanej w przypadku aplikacji WWW.

Budując stronę ASP.Net, w pliku ASPX definiowany jest jej układ, czyli kontrolki serwerowe i kod HTML. Obok nich znajduje się właściwy kod obsługujący daną formatkę. Podobnie jest w WPF. Wygląd definiowany jest za pośrednictwem pliku XML zapisanego w języku XAML, któremu także towarzyszy kod realizujący procedury obsługi zdarzeń lub dodatkowe operacje wykonywane przy inicjacji strony. W procesie kompilacji dokument XAML przekładany jest na ciąg wywołań API - mechanizm nie niesie ze sobą dodatkowego narzutu. Ale równocześnie dostępne są mechanizmy, które pozwalają w locie wczytać plik XAML i wygenerować odpowiedni interfejs.

Możliwości graficzne XAML i WPF są duże i pozwalają na tworzenie dowolnych grafik 2D i 3D, definiowanie kontrolek (pole tekstowe, przyciski, listy, siatki), okien, a także stosować panele lub inne pojemniki, które automatycznie rozmieszczają zawarte w nich obiekty. Definicja interfejsu to tak naprawdę ciąg poleceń (znaczników) oraz wskazanie do kodu obsługującego dane elementy. Oprócz definicji obiektów (linii, pól do wprowadzania danych itp.) WPF pozwala na definiowanie transformacji sceny - obrotów, skalowania, animacji, podobnie jak ma to miejsce w przypadku bibliotek graficznych. Definiując rozmiary elementów, należy posługiwać się jednostkami metrycznymi lub calami, a WPF zapewnia, że na każdym urządzeniu, niezależnie od jego rozdzielczości DPI (także na drukarce), dany obiekt zawsze będzie miał taki sam rozmiar. Nadal można używać pikseli, z tym że są to "piksele niezależne od rozdzielczości". Jeden taki piksel ma 1/96 cala (96 DPI to standardowy rozmiar czcionek w Windows Vista).

Architektura wyświetlania została zorganizowana przy zastosowaniu kilku warstw. Na samej górze znajduje się API użytkowe (tzw. Presentation Framework) wykorzystywane w aplikacjach i przez XAML. W wyniku operacji np. rysowania siatki lub pola tekstowego powstaje tzw. drzewo logiczne, które jest przekazywane do kolejnej warstwy Visual Layer. Drzewo wizualne składa się z bazowych elementów graficznych, takich jak pędzle, ścieżki itp. Podczas generowania drzewa pomijane są elementy niewidoczne (np. gdy pole tekstowe zasłania pewien fragment siatki). Dzięki temu skomplikowane interfejsy, gdzie dużo elementów nakłada się na siebie, mogą być rysowane bardzo szybko i to bez żadnego nakładu pracy ze strony programisty. Oczywiście można też tworzyć interfejs, używając API z warstwy Visual Layer lub bezpośrednio wpływać na sposób konstrukcji drzewa logicznego. Wszystkie te operacje wykonywane są w kodzie zarządzalnym.

Poniżej znajduje się warstwa sterownika graficznego (kod niezarządzalny). W Windows Vista składa się ona m.in. z modułu zarządzania desktopem oraz Composition Engine i Media Integration Layer. Każdy z fizycznych pikseli na tej platformie może być obsługiwany przez jedną z trzech technologii: DirectX 3D, Windows Forms/GDI+ albo właśnie WPF. W przypadku Vista za rysowanie zawsze odpowiada Direct3D oraz specjalny, nowy model sterownika LDDM o modułowej architekturze.

Dokument jak strona WWW

Kolejnym elementem WPF jest infrastruktura związana z dokumentem. Ponieważ biblioteka pozwala tworzyć aplikacje Windows, po których użytkownik porusza się jak po stronach WWW, konieczne było zapewnienie prostych mechanizmów, pozwalających zachować stan programu. Dzięki temu gdy użytkownik kliknie wstecz, może łatwo przenieść się do poprzednio wyświetlanego ekranu. Układ i kolejność etapów (okien) mogą być dowolne. Microsoft zdefiniował tzw. Structured Navigation Framework, który implementuje często spotykane w aplikacjach schematy nawigacji. Wśród dostępnych elementów warto wymienić kreatora, motor realizujący dowolny hierarchiczny układ i układ adaptatywny z centralnym hubem nawigacyjnym, który pozwala na łatwe i dynamiczne zmienianie kolejności otwierania okien w zależności od tego, co użytkownik wprowadza w kolejnych etapach.

WPF można wykorzystać jako narzędzie do prezentacji dokumentów. Specjalne pojemniki pozwalają m.in. przedstawiać tekst z różnym formatowaniem i osadzonymi rysunkami. Można także utrwalić taki dokument, zapisując treść wraz z innymi elementami niezbędnymi do prezentacji. Służy do tego XML Paper Specification. XAML ze swej natury może też być użyty jako język opisu strony przeznaczonej do druku. Renderowanie XAML zakłada oczywiście, że w danym momencie są dostępne wszystkie zasoby potrzebne do wygenerowania widoku - rysunki, czcionki itp.

Wiekowy format RAW (który służył jako typ pośredni podczas drukowania stron) został w WPF zastąpiony przez XPS, który jest pojemnikiem zawierającym wszystkie elementy wymagane do wiernego odwzorowania pokazywanych elementów, a obraz nie musi być statyczny i można w nim zapisać także animację. Plik XAML serializuje się do pliku XPS. Warto zauważyć, że w Windows Vista sterowniki drukarek mają rozumieć język XPS i dzięki temu wydruki dokumentów będą szybsze niż obecnie. Oprócz tego dokument XPS może mieć dołączone informacje o prawach do wykonywania określonych operacji RMS (Right Management Server).

Mechanizm ten pozwala m.in. na ograniczenie praw kopiowania do schowka, drukowania, a nawet prezentacji dokumentu na komputerze niepodłączonym do danej domeny.

Zupełnie inaczej definiowane są kontrolki w WPF. Po pierwsze, kontrolka ma przede wszystkim taką rolę, jaką pełni w interfejsie, czyli jest listą wyboru, polem, gdzie użytkownik wprowadza informacje, przyciskiem wywołującym określoną akcję itp. Dopiero potem nakładany jest sposób prezentacji, a więc generalnie "przepis" na wyświetlanie zawartości. Można porównać to z tzw. modelem Model-View-Controller, gdzie Controller to kontrolka (czyli jej zachowanie i to, jakie operacje pozwala wykonać użytkownikowi), View to wizualizator kontrolki określający jej wygląd, a Model to dane pobrane ze stanu dokumentu lub z bazy danych przy wykorzystaniu bindingu.

Ten mechanizm pozwala w bardzo prosty sposób stworzyć własny, unikalny wygląd interfejsu użytkownika. Aby to osiągnąć, wystarczy, że programista wybierze bazowy obiekt (kontrolkę) realizujący potrzebne mu funkcje i doda do niego wzorzec, który odpowiednio wyświetli dany element. Wzorzec jest także plikiem XAML umożliwiającym wskazywanie, która funkcja ma być wywołana w momencie gdy rysowany jest obiekt, analogicznie jak w przypadku funkcji OwnerDraw w Windows Forms.

Framework pozwala określać zachowania na poziomie typów elementów dokumentu. W ten sposób można określić, że np. wszystkie elementy służące do wprowadzania danych bazujące na TextBox w momencie najechania na nie myszą mają zmienić wygląd. Nie trzeba tego definiować dla każdej kontrolki, jak ma to miejsce w Win32 lub Windows Forms.

Dla każdego inny interfejs

Tworząc aplikacje wykorzystujące WPF, warto jednak pamiętać o kilku problemach. Jest to na tyle inna technologia, że standardowe podejście stosowane w projektach formatek w VS.Net nie ma sensu. Ponadto jest tyle różnych sposobów konstrukcji interfejsu, że najpierw trzeba bardzo dokładnie zaplanować interakcję z użytkownikiem, a nie próbować wykorzystania w aplikacji każdego z nowych elementów udostępnianych przez WPF.

Nic nie stoi na przeszkodzie, by jednak połączyć Windows Forms i WPF, bo kontrolki z WinForms mogą być użyte jako element w Windows Presentation Foundation.

Oprócz tego zaletą WPF jest modułowość i możliwość automatycznego dopasowania funkcjonalności. Przykładowo, jeżeli formatka nie korzysta z wyrafinowanych elementów 3D, to mechanizmy obsługi 3D nie są inicjowane, a w konsekwencji nawet gdy komputer nie ma potężnego akceleratora graficznego, aplikacja szybko wyświetla interfejs, a dzięki koncepcji "drzewa wizualnego" wyświetlanie jest często szybsze niż za pomocą rozbudowanego interfejsu w GDI+/WinForms.

Dodatki do WPF

Microsoft oferuje dodatek Cider (obecnie w wersji CTP) do VS.Net 2005, który pozwala projektować okna WPF, ale równocześnie rozwija nową rodzinę narzędzi Expression, która zawiera pakiet Interactive Designer przeznaczony do definiowania okien WPF. Interactive Designer używa dokładnie tego samego formatu projektu co VS.Net, a więc jego integracja ze środowiskiem programistycznym nie sprawi kłopotów. Na razie zespół zajmujący się VS.Net zapowiada, że listopadowa wersja Cider będzie ostatnią, która będzie udostępniana jako dodatek do VS.Net 2005. Następne będą oferowane wraz z IDE - kolejną wersją Visual Studio Orcas, którego pierwsza publiczna wersja testowa ma się pojawić na początku 2007 r. Obecnie jest dostępna tylko w postaci obrazu maszyny wirtualnej.

Kilka niezależnych firm oferuje własne narzędzia do projektowania wykorzystującego funkcje WFP, jak np. MobiForm Aurora - alternatywny projektant scen. Dostępnych jest także kilka konwerterów do generowania dokumentów w formacie XAML na podstawie plików graficznych. Mogą one być później użyte w nowej aplikacji jako elementy okien itp.

Tylko fakty

Cztery główne technologie Microsoft .Net 3.0

  • Windows Workflow Foundation (pisaliśmy o tym w Computerworld 44/2006)
  • Windows Communication Foundation i Windows CardSpace (pisaliśmy o tym w Computerworld 45/2006)
  • Windows Presentation Foundation
W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200