Silverlight 4 beta - przegląd nowości

Autor:  Bartłomiej Zass

Technologia Silverlight, będąca odpowiedzią Microsoft na podejście do tworzenia bogatych aplikacji internetowych (RIA) jest jednym z najbardziej dynamicznie rozwijanych projektów firmy. Pierwsza odsłona Silverlight ujrzała światło dzienne na wiosnę 2007 roku. Oferowała jeszcze dość ograniczone możliwości - w szczególności wykorzystywana była do udostępniania mediów. Ogłoszony rok później Silverlight 2 wprowadził do przeglądarki zagadnienia znane z platformy .NET. Programistom umożliwił tworzenie logiki aplikacji w językach zarządzanych - C# czy Visual Basic, ale również w językach dynamicznych takich jak Ruby czy Python. Designerzy wykorzystywali bogactwo kontrolek oraz zaawansowane techniki databindingowe do szybkiego projektowania aplikacji biznesowych. Latem 2009 roku ukazała się kolejna, trzecia wersja platformy. Silverlight 3 pozwolił instalować aplikacje poza przeglądarką internetową, dodał m.in. wsparcie dla sprzętowej akceleracji grafiki, nowych formatów mediów, pozycjonowania 3D i wielu innych.

Niespełna pół roku później, 18 listopada 2009 roku na konferencji PDC w Los Angeles Microsoft ogłosił publiczną wersję beta Silverlight 4. Jest to produkt przełomowy pod względem ilości oczekiwanych funkcjonalności - zaimplementowano ok. 70% tych, które zgłosili użytkownicy przez stronę http://dotnet.uservoice.com/. Pomimo tego, wtyczka Silverlight zajmuje nadal poniżej 5 MB, instalacja trwa około 10 sekund. W nowej wersji aplikacje ładuja się 30% szybciej a ich szybkość wzrosła prawie dwukrotnie. Oprócz wspieranych wcześniej przeglądarek, dodano oficjalne wsparcie dla Google Chrome.

Wśród nowych cech znalazły się między innymi: wsparcie dla drukowania, obsługa kamer internetowych i mikrofonów, obsługa schowka, drag & drop dla plików przeciąganych do aplikacji, obsługa prawego przycisku myszy, osadzanie stron HTML wewnątrz aplikacji Silverlight, multicasting dla mediów oraz wsparcie offline dla zabezpieczeń DRM. Dodano także obsługę uwierzytelnienia dla klas pozwalających na połączenia sieciowe, bogatą kontrolkę RichText do edycji tekstu z wielopoziomowym "Undo", pełne wsparcie dla zaawansowanych formularzy z walidacją danych. Wprowadzono także możliwą elewację uprawnień dla aplikacji działających poza przeglądarką - mogą one teraz nie tylko uzyskać dostęp do systemu plików, ale również korzystać z obiektów COM - przez co na przykład aplikacja Silverlight może wykorzystać funkcje pakietu Office.

Nowe cechy adresują trzy główne grupy tematyczne:

  • Aplikacje Biznesowe
  • Media
  • Aplikacje działające poza przeglądarką

W dalszej części artykułu zostaną omówione krótko najważniejsze nowe cechy Silverlight 4, które wzbogacają możliwości w każdej z powyższych kategorii.

Aplikacje biznesowe

Drukowanie

Według http://dotnet.uservoice.com/ możliwosć drukowania z poziomu aplikacji Silverlight była najbardziej oczekiwaną funkcjonalnością. W wersji czwartej wprowadzono obiekt PrintDocument, który po wywołaniu metody Print() wyświetla znane dobrze użytkownikom okno wyboru drukarki.

private void PrintButton_Click(object sender, RoutedEventArgs e)
    {
        pd.DocumentName = "Dokument do wydruku";
        pd.Print();
    }

Aby wysłać dokument do druku należy obsłużyć zdarzenie PrintPage obiektu PrintDocument. Wewnątrz niego wystarczy przekazać właściwości e.PageVisual obiektu PrintPageEventArgs element, który chcemy wydrukować. Może być nim dowolny obiekt z XAML, który dziedziczy po klasie UIElement – obiekt bitmapy jak i dynamicznie lub statycznie utworzone drzewo XAML (widoczne lub ukryte). Model zdarzeń pozwala na oprogramowanie stronicowania.

Obsługa prawego przycisku myszy

Dodano nowe zdarzenie – MouseRightButtonDown pozwalające obsłużyć prawy przycisk myszy wewnątrz aplikacji Silverlight. Dotychczas po kliknięciu prawym przyciskiem w przestrzeń aplikacji, użytkownik zawsze musiał zobaczyć standardowe menu odsyłające go do konfiguracji Silverlight (patrz zdjęcie poniżej).

Jeśli w zdarzeniu MouseRightButtonDown oznaczona zostanie właściwość e.Handled (klasy MouseButtonEventArgs) jako true, standardowe menu nie zostanie wyświetlone. Zamiast niego użytkownik ujrzy menu kontekstowe zaprojektowane graficznie w dowolny sposób przez programistę. Dla uproszczenia można skorzystać z pomocniczej klasy Popup.

Drag & drop

Silverlight 4 umożliwia obsłużenie scenariuszy przeciągania plików bezpośrednio z systemu operacyjnego do aplikacji (zarówno działającej wewnątrz jak i poza przeglądarką). Wystarczy oznaczyć właściwość AllowDrop obiektu layout, który ma obsługiwać funkcjonalność przeciągania. W kodzie obsługi zdarzenia Drop dla layoutu należy pobrać z właściwości e.Data obiekt IDataObject, na którym następnie powinna zostać wywołana metoda GetData(). IDataObject.GetData() zwraca listę obiektów FileInfo po której iterując uzyskujemy strumienie do plików. Pozwalają one dowolnie wykorzystać zawartość przeciągniętych plików wewnątrz aplikacji Silverlight.

 

void LayoutRoot_Drop(object sender, DragEventArgs e)
        {
            IDataObject data = e.Data;
            foreach (FileInfo fi in data.GetData())
            {
                FileStream stream = fi.Open(…)
            }
        }

Obsługa kamer internetowych i mikrofonu

Możliwe jest wykorzystanie dowolnego źródła dźwięku lub wideo w aplikacji, jeśli użytkownik wyrazi na to zgodę. Po wywołaniu metody:

if (!CaptureDeviceConfiguration.AllowedDeviceAccess)
            {
                CaptureDeviceConfiguration.RequestDeviceAccess();
                // (...)
            }
            else
            {
                // (...)
            }

użytkownik zostanie zapytany czy zgadza się na udostępnienie kamery i mikrofonu:

Po uzyskaniu akceptacji wystarczy skorzystać z obiektu CaptureSource i jego metod: otworzyć komunikację z urządzeniem poprzez Start(), dokonać np. zrzutu ekranu do obiektu WritableBitmap poprzez wywołanie metody AsyncCaptureImage a na koniec zamknąć komunikację wywołując Stop(). To oczywiście najprostszy scenariusz – bardziej zaawansowany przykład mógłby wykorzystywać tzw. Pixel Shadery do dynamicznej manipulacji obrazem z kamery czy wykonywania innych oczekiwanych operacji na przechwyconym materiale.

Klasa CaptureDeviceConfiguration pozwala również na wyświetlenie użytkownikowi listy dostępnych urządzeń i wybranie tego, z którego powinna skorzystać aplikacja.

Obsługa schowka

Dostęp do schowka również wymaga uzyskania zgody od użytkownika. Kiedy już zostanie ona wyrażona, możliwe jest w sposób programowy skopiowanie lub odczytanie danych ze schowka wykorzystując metody statyczne GetText() i SetText() klasy Clipboard.

Kontrolka RichTextArea

Zaawansowana kontrolka, która pozwala wizualnie edytować tekst. Umożliwia m.in.: wykorzystywać hiperłącza i zagnieżdżoną grafikę, modyfikować wygląd czcionek, itp. Kontrolka wspiera także oba kierunki pisania tekstu (tzw. BIDI) oraz wielopoziomowe „Undo”.

Usprawnienia w Data Binding

Silverlight 4 wprowadza znaczące usprawnienia w bindowaniu danych. Możliwe jest teraz bindowanie do instancji obiektów DependencyObject, indekserów String, określenie w sposób deklaratywny sposobu formatowania obiektu String, wartości domyślnych, grupowanie elementów kolekcji. Visual Studio 2010 znakomicie wspiera Data Binding w aplikacjach Silverlight – operacje takie jak zastosowanie konwertera do obiektu string (kiedy zawiera URI) na grafikę czy widok master / detail dla danych można teraz „wyklikać”.

Bardzo ciekawe są także nowe możliwości walidacji danych. Po implementacji interfejsu INotifyDataErrorInfo lub IDataErrorInfo przez nasz obiekt biznesowy uzyskujemy automatyczne sprawdzanie poprawności danych w warstwie interfejsu użytkownika.

Multicasting i UDP

Przestrzeń nazw System.Net.Sockets w Silverlight 4 wspiera komunikację typu multicast poprzez protokół User Datagram Protocol (UDP). Pozwala ona w sposób wydajny przesyłać wiadomości do bardzo dużej liczby klientów i dobrze się skalować.

Uwierzytelnianie w komunikacji sieciowej

Dodano wsparcie dla wszystkich typów uwierzytelniania w komunikcji sieciowej (np. klasy WebClient). Wspierane jest zarówno uwierzytelnianie NTLM, Digest jak i Basic. Możliwe jest przekazanie danych użytkownika przy pomocy klasy NetworkCredential lub skorzystanie z domyślnych danych uwierzytelniających ustawiając właściwość UseDefaultCredentials klasy WebClient na true.

Media

W Silverlight 4 wprowadzono znaczące usprawnienia rozszerzające możliwości technologii w zakresie udostępniania mediów.

Offline DRM (Digital Rights Management) – czyli możliwość wykorzystywania aplikacji Silverlight do odczytywania zabezpieczonego materiału w trybie offline. Materiał może być zabezpieczony technologią PlayReady (wykorzystującą algorytmy AES) lub tradycyjnym Windows Media Digital Rights Management 10.

Odtwarzanie zabezpieczonego materiału MP4 – możliwość odtwarzania zabezpieczonego przez PlayReady materiału H.264 i AAC-LC.

WMS Multicast – element MediaElement może teraz wykorzystywać pliki formatu *.nsc (WMS - Windows Media Station file), który pozwala odtwarzać pliki mediów poprzez multicast. Jest to bardzo podobne w koncepcji do udostępniania klasycznych mediów drogą radiową, gdzie odbiornik może „dostroić się” do odpowiedniej stacji.

Aplikacje działające poza przeglądarką

Elewacja uprawnień

Czwarta odsłona Silverlight wprowadza znaczące usprawnienia w stosunku do aplikacji działających poza przeglądarką internetową. Każda aplikacja Silverlight już od wersji trzeciej pozwala na zainstalowanie jej na komputerze użytkownika (jeśli twórca doda odpowiedni manifest). Dotychczas aplikacje działające poza przeglądarką poza drobnymi przywilejami (np. dodatkowa przestrzeń dyskowa) podlegały dużym restrykcjom bezpieczeństwa. Nadal znajdowały się w tzw. Sandboxie – wyizolowanej przestrzeni, która nie pozwalała im na przykład dostać się do systemu plików. W Silverlight 4 model wyizolowanej aplikacji działającej poza przeglądarką nadal pozostał. Dodano jednak drugi, opcjonalny tryb – aplikacja o podniesionych uprawnieniach.

Jeśli programista skorzysta z nowej opcji elewacji uprawnień (dodatkowa flaga w manifeście aplikacji), użytkownik po wyrażeniu zgody uzyska aplikację potrafiącą między innymi dostać się do systemu plików, komunikować się z różnymi domenami, skorzystać z kontrolki przeglądarki internetowej, a nawet obiektów COM zainstalowanych na komputerze użytkownika.

Osadzanie kodu HTML w Silverlight – WebBrowser i HTMLBrush

Dotychczas jedyną możliwością łączenia aplikacji Silverlight z serwisem internetowym było osadzanie kontrolek na jego stronach HTML. Silverlight 4 pozwala na odwrotny model – hostowanie stron HTML wewnątrz aplikacji Silvelight. Można to rozwiązać na dwa sposoby:

  • Kontrolka WebBrowser – dostępna wyłącznie dla aplikacji działających poza przeglądarką internetową. Można ją porównać do osadzonej kontrolki przeglądarki wewnątrz aplikacji. Pozwala ona nawigować po stronach wewnątrz Silverlight - jest interaktywna dla użytkowników.
  • HTMLBrush – dla dowolnych typów aplikacji. Umożliwia wyświetlić stronę HTML jako „brush” – a przez to potraktować ją na przykład jako wypełnienie dowolnej innej kontrolki (tak samo jak „pędzle” oferujące gradient czy wypełnienie zawartością pliku graficznego). Wadą tego podejścia jest brak interakcji – strona nie pozwala na nawigowanie, itp.

Oba podejścia działają poprawnie, jeśli strona HTML zawiera np. elementy interaktywne w technologii Flash. Co więcej, wykorzystanie kontrolki webbrowser pozwala podać jej jako źródło inne typy danych – np. pliki PDF. Dzięki temu możemy wyświetlić domyślną kontrolkę webową podglądu pliku PDF w naszej aplikacji.

Osadzanie kodu stron umożliwi m.in. skonstruowanie serwisu w technologii Silverlight, pozostawiając miejsce na reklamy w HTML.

Obsługa automatyki COM

Aplikacje o podniesionych uprawnieniach mogą korzystać z automatyki COM. Nie mają wprawdzie możliwości zainstalowania nowych obiektów COM, ale mogą wykorzystywać dowolne znajdujące się na komputerze (przy pomocy klasy ComAutomationFactory). Dzięki temu aplikacja Silverlight może na przykład komunikować się z aplikacjami Office – wyeksportować czy zaimportować dane do Excela lub dodać wpis do kalendarza programu Outlook (o ile jest zainstalowany na komputerze użytkownika).

Aby było to możliwe, dodano także wsparcie do późnego wiązania danych. W przypadku języka Visual Basic jest ono dodane domyślnie dla obiektów typu Object, w przypadku języka C# dodano nowy typ zmiennych jakim jest „dynamic”.

Powiadomienia i zaawansowana obsługa okna

Aplikacje Silverlight działające poza przeglądarką internetową umożliwiają teraz dynamiczne modyfikowanie rozmiaru okna z poziomu aplikacji (aby np. uzyskać efekt „zwijania” części okna) czy też programowe ustawianie flagi „Always On Top”.

Nowe funkcjonalności powiadomień (Notifications) umożliwiają dodanie pojawiających się informacji dla użytkownika analogicznych do powiadomień programu Outlook. Po zajściu odpowiedniego zdarzenia, użytkownik zobaczy niewielkie animowane okno np. w prawym dolnym rogu. Po kliknięciu go, może na przykład przywołać „focus” głównej aplikacji.

Podsumowanie

O technologii Silverlight nie można już powiedzieć, że służy wyłącznie do tworzenia prostych aplikacji internetowych. Z zaawansowanymi funkcjami pracy poza przeglądarką umożliwia znacznie więcej. Wydanie trzech kolejnych wersji w ciągu 2 lat udowadnia jak ważnym tematem jest RIA dla Microsoft i jak dynamicznie projekt jest rozwijany. Silverlight nadal pozostaje bardzo wygodną platformą dla twórców – umożliwia konstruowanie interfejsu w sposób deklaratywny (oferując całą masę dostępnych kontrolek czy schematów graficznych), wykorzystując jednocześnie zalety języków .NET do oprogramowania logiki.

Opisane w tym artykule nowości to tylko niewielka część nowych cech platformy. Aby poznać je wszystkie – w tym m.in. współdzielenie bibliotek pomiędzy pełnym .NET a Silverlight, wzorce pozwalające konstruowanie aplikacji biznesowych (WCF RIA Services), narzędzia do profilingu a także wiele drobniejszych usprawnień w XAML – warto przeczytać pełną dokumentację dostarczaną wraz z Silverlight 4 SDK.

Wersja finalna Silverlight 4 zostanie ogłoszona już w pierwszej połowie 2010 roku (po jednej poprzedzającej ją wersji Release Candidate).

Wszystkie potrzebne narzędzia do tworzenia aplikacji Silverlight 4 dostępne są na stronie: http://www.silverlight.net.

O autorze

Bartłomiej Zass – zajmuje się w Microsoft Polska współpracą z działami technicznymi producentów oprogramowania, pomagając w efektywnym wykorzystaniu najnowszych rozwiązań. Specjalizuje się w szczególności w technologiach internetowych i zagadnieniach konstrukcji interfejsu użytkownika. Pasjonat Silverlight od pierwszych wersji.

Planujesz zrealizować ciekawy projekt w Silverlight? Potrzebujesz wiedzy? Możesz pochwalić się ciekawym wdrożeniem? Skontaktuj się ze mną –*bzass@microsoft.com*.