Studio efektów specjalnych

Visual Studio 2005 już teraz pozwala projektować nowoczesne aplikacje, wykorzystujące zaawansowane mechanizmy wizualizacji oparte na języku XML. Komponent, który to umożliwia - Windows Presentation Foundation - będzie standardowym wyposażeniem nowego systemu Windows Vista, ale również rozszerzeniem Windows XP.

Visual Studio 2005 już teraz pozwala projektować nowoczesne aplikacje, wykorzystujące zaawansowane mechanizmy wizualizacji oparte na języku XML. Komponent, który to umożliwia - Windows Presentation Foundation - będzie standardowym wyposażeniem nowego systemu Windows Vista, ale również rozszerzeniem Windows XP.

Windows Presentation Foundation (znany wcześniej pod nazwą Avalon) jest biblioteką przeznaczoną do tworzenia interfejsu użytkownika do Windows. Stanowi część WinFX, następcy API platformy Win32 w systemie Windows Vista. Biblioteka będzie równocześnie samodzielnym składnikiem, który można zainstalować w Windows XP, co pozwoli na tworzenie rozwiązań działających zarówno w najnowszym systemie operacyjnym Microsoftu, jak i w jego poprzedniej wersji, z 2001 roku.

Wprowadzenie do WPF

Instalacja Windows SDK. Nie warto podczas instalacji rejestrować zmiennych środowiskowych. Częścią SDK jest skrypt, który je uaktywnia na życzenie. Jeśli na przykład stosuje się równolegle inne wersje bibliotek, taka prerejestracja może spowodować późniejsze kłopoty.

Instalacja Windows SDK. Nie warto podczas instalacji rejestrować zmiennych środowiskowych. Częścią SDK jest skrypt, który je uaktywnia na życzenie. Jeśli na przykład stosuje się równolegle inne wersje bibliotek, taka prerejestracja może spowodować późniejsze kłopoty.

Najważniejsze, co wnosi WPF, to pewnego rodzaju połączenie koncepcji aplikacji WWW oraz klasycznych form Windows. Tworząc stronę ASP.NET, w oddzielnym pliku ASPX definiujemy układ strony, czyli kontrolki serwerowe i kod HTML. Obok tego znajduje się właściwy kod obsługujący daną formę. Podobnie jest w WPF. Wygląd definiowany jest za pośrednictwem pliku XML (w języku XAML; jego schemat i opis znajduje się na stronach MSDN). Takiemu plikowi towarzyszy również kod, który realizuje procedury obsługi zdarzeń oraz na przykład dodatkowe operacje konieczne do wykonania podczas inicjowania danej strony. W XAML mogą być zdefiniowane kształty 2D, 3D, kontrolki, okna, pojemniki na pewną treść, transformacje, animacje kształtów itp. Definicja interfejsu to ciąg poleceń (znaczników) oraz wskazań do kodu obsługującego dane elementy. Oprócz definicji obiektów (linii, pól do wprowadzania danych itp.) można także definiować transformacje sceny (obroty, skalowania, animacje) podobnie w wypadku bibliotek graficznych. WPF intensywnie wykorzystuje grafikę wektorową, co w zasadzie wymusza stosowanie akceleratorów 2D i 3D. Oczywiście, analogicznie jak w ASP.NET, można także budować poszczególne składniki okna, używając kodu obiektowego oraz API. Skutek będzie podobny.

Definiując rozmiary elementów w WPF, należy się posługiwać jednostkami metrycznymi (lub calami). W związku z tym można definiować fizyczne rozmiary elementów, czyli np. określić, że okno mierzy 2x3 cm i będzie miało taki rozmiar zarówno na monitorze, jak np. po wydrukowaniu. Natomiast nadal można używać pikseli, ale są to "piksele niezależne od rozdzielczości". Jeden taki piksel ma rozmiar 1/96 cala (a 96 dpi to standardowa wielkość czcionek w Windows).

Kolejnym ciekawym elementem WPF jest infrastruktura związana z dokumentem. Ponieważ biblioteka pozwala tworzyć aplikacje Windows, z którymi użytkownik pracuje jak ze stronami WWW, konieczne było zapewnienie prostych mechanizmów, które pozwalają nawigować po kolejnych stronach. Oznacza to konieczność łatwego zachowywania stanu programu, aby gdy użytkownik kliknie Wstecz, bez problemu przenieść go do poprzedniego etapu. Służy do tego specjalny dziennik oraz dodatkowe API, nadbudowane nad tzw. Isolated Storage (czyli mechanizmem zapisującym obiekt w izolowanej, bezpiecznej przestrzeni; używanym np. do uruchamiania aplikacji niezaufanej, która musi zapisać jakieś informacje).

Po zainstalowaniu dodatku w Visual Studio 2005 pojawiają się nowe typy projektów.

Po zainstalowaniu dodatku w Visual Studio 2005 pojawiają się nowe typy projektów.

Układ i kolejność etapów (okien) mogą być dowolne, ale Microsoft zdefiniował tzw. Structured Navigation Framework, która implementuje pewne często spotykane układy kodu w aplikacjach, np.: kreator (liniowy), ustalony hierarchiczny (znamy z góry wszystkie możliwe kolejności okien) oraz adaptatywny z centralnym węzłem nawigacyjnym.

Inaczej trochę są definiowane kontrolki w WPF. Kontrolka ma przede wszystkim określoną funkcję, jaką pełni w interfejsie - jest np. listą wyboru, polem, w które użytkownik wprowadza informacje, przyciskiem wywołującym akcję itp. Na to nakładany jest sposób prezentacji (np. skórka lub generalnie przepis na pokazanie zawartości kontrolki).

Dzięki temu programista znacznie rzadziej musi samodzielnie tworzyć całą kontrolkę, gdy chce nadać unikatowy wygląd interfejsowi. Może wybrać jedną z wielu gotowych i dodać własną metodę wizualizacji.

Co ciekawe, można zmieniać działanie kontrolek pełniących określone funkcje na poziomie dokumentu. W ten sposób można np. określić, że wszystkie elementy służące do wprowadzania danych w momencie najechania myszą mają zmienić wygląd (pojawi się dodatkowa ramka czy pogrubienie tekstu). Nie trzeba tego określać dla każdej kontrolki z osobna, jak w "czystym" Win32.

W Windows Forms (lub Win32) tworząc aplikacje wielowątkowe trzeba było uważać, aby operacje wykonywane w wielu wątkach nie powodowały konfliktu w momencie użycia zasobu graficznego (np. pędzla). W WPF przyjęto założenie, że każda kontrolka czy też okno ma przypisany wątek (thread affinity). Dzięki temu znacznie łatwiej jest napisać aplikację, która nie będzie zamrażana na czas wykonywania długotrwałych operacji.

Warto też zwrócić uwagę na interfejsy projektowane z uwzględnieniem osób niepełnosprawnych. Do stron WWW są odpowiednie znaczniki, a deklaratywna składnia dodatkowo ułatwia pracę programom do odczytywania zawartości ekranu (screen reader). W WinFX jest API do UI Automation, które pozwala odczytać z zewnątrz aplikacji układ elementów interfejsu. A dzięki temu, że określone są także role kontrolek, czytnik ekranu może podpowiedzieć niedowidzącemu, do czego służy dany element interfejsu. API jest równocześnie idealnym narzędziem do tworzenia automatycznych testów interfejsu użytkownika.

WPF w Visual Studio 2005

Parametry zabezpieczeń aplikacji typu WinFX Web Browser Application.

Parametry zabezpieczeń aplikacji typu WinFX Web Browser Application.

Aby uruchamiać aplikacje korzystające z Windows Presentation Foundation, trzeba zainstalować bibliotekę runtime WinFX. Ostateczna jej wersja będzie dostępna w Windows Vista (koniec 2006 roku), ale pod koniec listopada 2005 roku Microsoft opublikował wersję CTP działającą w Windows XP SP2 i współpracującą z ostateczną wersją .NET 2.0 oraz z ostateczną wersją Visual Studio 2005 (poprzednie wersje CTP współpracowały z betą 2).

Do tworzenia aplikacji WPF w Visual Studio 2005 trzeba zainstalować dodatkowo listopadowe wersje CTP pakietu Windows SDK oraz Visual Studio Extensions for WinFX, które są przystosowane do pracy z powyższą wersją biblioteki RT WinFX, platformą .NET 2.0 oraz Visual Studio 2005 (także Express Edition).

Pakiet Visual Studio Extensions for WinFX (vsextwfx.msi) dodaje do VS 2005 nowe typy projektów oraz zapewnia obsługę schematu XAML, tak że podczas edycji dostępne są podpowiedzi, jakich elementów można użyć, oraz krótka pomoc kontekstowa (tooltip). Natomiast nie ma projektanta graficznego, dostępnego do Windows Forms.

Dlatego warto zainstalować wersję CTP edytora Acrylic, nowego produktu z rodziny Microsoft Expression, przeznaczonego do tworzenia grafiki wektorowej i bitmapowej. Do programu jest dodatek pozwalający zapisać zaprojektowaną "scenę" w pliku XAML, którego może następnie użyć aplikacja WPF.

Częścią SDK jest także XamlPad - edytor, który na bieżąco parsuje plik XAML i pozwala sprawdzić, jak wygląda dany fragment kodu lub cały plik XAML, co upraszcza naukę składni XAML i testowanie możliwości tego języka.

Po zainstalowaniu biblioteki RT WinFX, pakietu Windows SDK oraz dodatku do VS 2005, można uruchomić środowisko Visual Studio i wybrać jeden z nowych typów projektów.

WinFX Windows Application to projekt aplikacji Windows wykorzystującej WPF, a nie standardowe Windows Forms. Aplikację tego typu można instalować w docelowym komputerze przez skopiowanie lub korzystając z mechanizmu ClickOnce. WinFX Web Browser Application to w zasadzie analogiczny projekt, ale dodatkowo ograniczono uprawnienia aplikacji i zmieniono sposób uruchamiania. Mamy prawie pełne możliwości WPF, ale z punktu widzenia użytkownika aplikacja działa w przeglądarce (uwaga - aplikacja jest nadal uruchamiana po stronie klienta). Po wybraniu tego projektu ustawione są odpowiednie ograniczenia dla strefy Internet. Natomiast (poza pewnymi ograniczeniami API) całą aplikację pisze się w analogiczny sposób.

Głównym obiektem aplikacji WPF jest instancja klasy Application, która odpowiada za obsługę komunikatów (a tym samym zdarzeń zachodzących w aplikacji - dotyczących formy, jak kliknięcie przycisku czy ruch myszy, oraz dotyczących aplikacji, jak start programu itp.). Jest też pojemnikiem zarządzającym nawigacją między stronami oraz pośredniczy podczas dzielenia informacji o stanie (gdy forma A chce przekazać parametr do formy B). Obiekt aplikacji jest zawsze dostępny za pośrednictwem statycznej właściwości Application.Current (w wypadku aplikacji wykorzystujących XAML można też użyć MyApplication).

Do reprezentacji okna służy jedna z klas dziedziczących po Window. Obiekt można stosować, gdy w aplikacji nie korzysta się z nawigacji (albo gdy trzeba np. pokazać okno dialogowe). Window zarządza dostępną przestrzenią okna i zawiera wszystkie kontrolki. W WPF nie każda kontrolka jest oknem (jak dużo elementów w Win32). Część jest po prostu obiektem graficznym lub transformacją.

Najczęściej używanym obiektem jest Page. Taka forma zawiera tzw. NavigationWindow, które zapewnia ujednolicony interfejs do nawigacji po kolejno odwiedzanych stronach.

Page jest również specjalnym znacznikiem w XAML, który określa, że dane okno może brać udział w nawigacji. Obiekt Page zajmuje więcej pamięci niż zwykłe okno typu Window, ale ma znacznie rozbudowaną infrastrukturę usługową, czyli więcej funkcji.

Warto też pamiętać, że w XAML można zawartość okna wczytać jako część panelu (więcej informacji o układzie elementów w dalszej części artykułu).


Zobacz również