Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der...

121
Thomas Claudius Huber Silverlight 4 Das umfassende Handbuch

Transcript of Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der...

Page 1: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Thomas Claudius Huber

Silverlight 4Das umfassende Handbuch

Page 2: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Auf einen Blick

TEIL I Grundlagen und Konzepte

1 Einführung in Silverlight ............................................... 35

2 Das Programmiermodell ............................................... 71

3 XAML .......................................................................... 153

4 Controls ....................................................................... 203

5 Layout .......................................................................... 281

6 Dependency Properties ................................................ 359

7 Input Events ................................................................. 385

8 Commands ................................................................... 447

TEIL II Fortgeschrittene Techniken

9 Ressourcen ................................................................... 473

10 Styles und Templates .................................................... 511

11 Eigene Controls ............................................................ 551

12 Daten ........................................................................... 593

13 Services und Kommunikation ....................................... 699

14 Isolated Storage ........................................................... 869

TEIL III Multimedia und Drucken

15 2D-Grafik ..................................................................... 899

16 Animationen ................................................................ 963

17 Multimedia .................................................................. 1001

18 Drucken ....................................................................... 1039

TEIL IV Applikationen und Integration

19 Applikationen ............................................................... 1071

20 Browser, HTML und JavaScript ..................................... 1125

Page 3: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

5

Inhalt

Vorwort ...................................................................................................................... 21Hinweise zum Buch ..................................................................................................... 25

TEIL I GRUNDLAGEN UND KONZEPTE

1 Einführung in Silverlight ...................................................................... 35

1.1 Aktuelle Technologien der Webentwicklung ............................................. 351.1.1 HTML ........................................................................................ 361.1.2 JavaScript .................................................................................. 361.1.3 Cascading Style Sheets (CSS) ...................................................... 371.1.4 DHTML ..................................................................................... 381.1.5 Ajax ........................................................................................... 381.1.6 Browser-Plugins ......................................................................... 39

1.2 Silverlight – ein Überblick ......................................................................... 411.2.1 Rich Internet Applications & Silverlight ...................................... 421.2.2 Stärken und Schwächen von Silverlight ...................................... 461.2.3 Die Silverlight-Architektur ......................................................... 481.2.4 Ladevorgang einer Silverlight-Anwendung ................................. 491.2.5 Die Silverlight-Rendering-Pipeline ............................................. 501.2.6 Neuerungen in Silverlight 4 ....................................................... 52

1.3 Silverlight-Konzepte ................................................................................. 531.3.1 XAML ........................................................................................ 561.3.2 Layout ....................................................................................... 591.3.3 Dependency Properties .............................................................. 601.3.4 Ressourcen ................................................................................ 641.3.5 Styles und Templates ................................................................. 651.3.6 Data Binding .............................................................................. 661.3.7 3D ............................................................................................. 67

1.4 Zusammenfassung .................................................................................... 70

2 Das Programmiermodell ...................................................................... 71

2.1 Das erste Silverlight-Projekt ...................................................................... 712.1.1 Das Silverlight-Projekt erstellen ................................................. 722.1.2 Struktur des Projekts .................................................................. 732.1.3 Die Anwendung implementieren und starten ............................. 772.1.4 Output des Projekts (XAP & Co.) ............................................... 78

Page 4: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

6

2.1.5 Ladevorgang der Silverlight-Anwendung .................................... 832.1.6 Die Silverlight-Anwendung im Browser ...................................... 852.1.7 Deployment auf dem Webserver ................................................ 852.1.8 Dekompilieren von Silverlight-Anwendungen ............................ 86

2.2 Namespaces, Assemblies und Basisklassen ................................................ 872.2.1 Namespaces ............................................................................... 872.2.2 Assemblies ................................................................................. 892.2.3 Basisklassen ............................................................................... 91

2.3 Weitere Projektvorlagen in Visual Studio 2010 ......................................... 952.3.1 Silverlight-Anwendung mit Webprojekt ..................................... 952.3.2 FriendStorageOnline mit Webprojekt ......................................... 992.3.3 Silverlight-Klassenbibliothek-Vorlage ......................................... 100

2.4 Das object-Tag und eigene Splashscreens ................................................. 1012.4.1 Das object-Tag ........................................................................... 1022.4.2 Größe und Position des object-Tags ........................................... 1062.4.3 Der Splashscreen von FriendStorageOnline ................................ 108

2.5 Weitere Dateien einer Silverlight-Anwendung .......................................... 1132.5.1 Die Dateien AppManifest.xml und ApplicationInfo.cs ................ 1132.5.2 Im Hintergrund generierte Dateien ............................................ 114

2.6 Die Klassen Application und Dispatcher ................................................... 1192.6.1 Der Einstiegspunkt mit Application ............................................ 1192.6.2 Multithreading mit Dispatcher & Co. ......................................... 129

2.7 Die Größe der .xap-Datei reduzieren ........................................................ 1352.7.1 Application Library Caching ....................................................... 1352.7.2 Assemblies on Demand .............................................................. 144

2.8 Zusammenfassung .................................................................................... 150

3 XAML ................................................................................................... 153

3.1 <Warum>XAML</Warum> ....................................................................... 1533.2 Elemente und Attribute ............................................................................ 1573.3 Namespaces ............................................................................................. 159

3.3.1 Der XML-Namespace von Silverlight .......................................... 1593.3.2 Der XML-Namespace für XAML ................................................. 1633.3.3 Die XML-Namespaces für den Designer ..................................... 1643.3.4 Namespace-Alias ....................................................................... 1653.3.5 XAML mit eigenen CLR-Namespaces erweitern .......................... 1653.3.6 Der XML-Namespace des Silverlight SDK ................................... 1703.3.7 Namespaces in FriendStorageOnline .......................................... 171

3.4 Properties in XAML setzen ....................................................................... 1713.4.1 Die Attribut-Syntax .................................................................... 172

Page 5: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

7

3.4.2 Die Property-Element-Syntax ..................................................... 1733.4.3 Die Content Property (Default-Property) .................................... 1743.4.4 Die Attached-Property-Syntax ................................................... 177

3.5 Type-Converter ........................................................................................ 1783.5.1 Eigene Type-Converter implementieren ..................................... 1793.5.2 Implizite Konvertierung durch den XAML-Parser ....................... 183

3.6 Markup-Extensions ................................................................................... 1843.6.1 Syntax und Funktionsweise von Markup-Extensions ................... 1853.6.2 Markup-Extensions von Silverlight ............................................. 1873.6.3 Markup-Extensions von XAML ................................................... 188

3.7 XAML-Spracherweiterungen ..................................................................... 1883.8 Collections in XAML ................................................................................. 192

3.8.1 IList-Collections ......................................................................... 1923.8.2 IDictionary-Collections .............................................................. 193

3.9 XAML dynamisch laden ............................................................................ 1943.10 Object Tree und Visual Tree ..................................................................... 1963.11 Zusammenfassung .................................................................................... 199

4 Controls ............................................................................................... 203

4.1 Die Klasse Control .................................................................................... 2054.2 ContentControls ....................................................................................... 208

4.2.1 Buttons ...................................................................................... 2104.2.2 Label ......................................................................................... 2184.2.3 ChildWindow ............................................................................ 2224.2.4 ToolTip ...................................................................................... 2294.2.5 ScrollViewer .............................................................................. 2314.2.6 Sonstige ..................................................................................... 235

4.3 ItemsControls ........................................................................................... 2354.3.1 ItemsControls mit Header .......................................................... 2374.3.2 TreeView ................................................................................... 2384.3.3 Selector ..................................................................................... 2454.3.4 TabControl ................................................................................ 251

4.4 Text-Controls ........................................................................................... 2534.4.1 TextBox ..................................................................................... 2534.4.2 PasswordBox ............................................................................. 2554.4.3 AutoCompleteBox ..................................................................... 2554.4.4 TextBlock ................................................................................... 2594.4.5 RichTextBox ............................................................................... 262

4.5 Datum-Controls ........................................................................................ 2644.5.1 Calendar .................................................................................... 264

Page 6: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

8

4.5.2 DatePicker ................................................................................. 2674.6 Range-Controls ......................................................................................... 268

4.6.1 Slider ......................................................................................... 2694.6.2 ProgressBar ................................................................................ 2704.6.3 ScrollBar .................................................................................... 271

4.7 Sonstige ................................................................................................... 2714.7.1 Border ....................................................................................... 2714.7.2 Viewbox .................................................................................... 2724.7.3 Popup ........................................................................................ 2744.7.4 Image ........................................................................................ 275

4.8 Das Silverlight Toolkit ............................................................................... 2764.9 Dritthersteller ........................................................................................... 2784.10 Zusammenfassung .................................................................................... 279

5 Layout .................................................................................................. 281

5.1 Der Layoutprozess .................................................................................... 2825.1.1 Die zwei Schritte des Layoutprozesses ....................................... 2825.1.2 Beim Layoutprozess mitreden .................................................... 2855.1.3 Ein eigenes Layout-Panel (DiagonalPanel) .................................. 2865.1.4 Zusammenfassung des Layoutprozesses ..................................... 290

5.2 Layout-Eigenschaften von Elementen ....................................................... 2915.2.1 Width und Height ...................................................................... 2915.2.2 Die UseLayoutRounding-Property .............................................. 2925.2.3 Margin und Padding .................................................................. 2945.2.4 Alignments ................................................................................ 2975.2.5 Die Visibility-Property ................................................................ 2995.2.6 Transformationen ....................................................................... 3005.2.7 Projektionen .............................................................................. 315

5.3 Panels ...................................................................................................... 3205.3.1 Die Klasse Panel ........................................................................ 3205.3.2 Canvas ....................................................................................... 3215.3.3 StackPanel ................................................................................. 3245.3.4 Grid ........................................................................................... 3265.3.5 VirtualizingPanel ........................................................................ 3345.3.6 Übersicht der Alignments in den verschiedenen Panels .............. 3355.3.7 Wenn der Platz im Panel nicht ausreicht .................................... 336

5.4 Das Layout in FriendStorageOnline ........................................................... 3375.4.1 Das Layout von FriendStorageOnline aus Benutzersicht ............. 3385.4.2 Das Layout von FriendStorageOnline aus Entwicklersicht ........... 343

Page 7: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

9

5.4.3 PlaneProjection flippt den Inhalt ................................................ 3485.4.4 Das FishEyePanel ....................................................................... 352

5.5 Zusammenfassung .................................................................................... 356

6 Dependency Properties ....................................................................... 359

6.1 Die Grundlagen ........................................................................................ 3606.1.1 Die Klassen DependencyObject und DependencyProperty ......... 3606.1.2 Ermittlung des Wertes einer Dependency Property .................... 362

6.2 Dependency Properties ............................................................................ 3646.2.1 Implementieren einer Dependency Property .............................. 3646.2.2 Metadaten der DependencyProperty-Klasse .............................. 3676.2.3 Lokal gesetzte Werte lesen und löschen ..................................... 3696.2.4 Blick auf existierende Dependency Properties ............................ 370

6.3 Attached Properties .................................................................................. 3706.3.1 Implementieren einer Attached Property ................................... 3716.3.2 Ein einfaches Panel mit Attached Properties .............................. 374

6.4 Dependency Properties in FriendStorageOnline ........................................ 3776.4.1 Das FishEyePanel ....................................................................... 3776.4.2 Die BindingHelper-Klasse .......................................................... 379

6.5 Zusammenfassung .................................................................................... 382

7 Input Events ........................................................................................ 385

7.1 Routed Events .......................................................................................... 3857.1.1 Die Routed Events von Silverlight .............................................. 3867.1.2 Sender und OriginalSource der RoutedEventArgs ....................... 3877.1.3 Die Handled-Property ................................................................ 3907.1.4 Routed Events im Detail ............................................................ 391

7.2 Tastatur .................................................................................................... 3947.2.1 Events ........................................................................................ 3947.2.2 Der Fokus .................................................................................. 3957.2.3 Die Tab-Reihenfolge .................................................................. 3967.2.4 Die ModifierKeys ....................................................................... 397

7.3 Maus ........................................................................................................ 3977.3.1 Events ........................................................................................ 3987.3.2 Doppelklick implementieren ...................................................... 3987.3.3 Kontextmenü bei Rechtsklick ..................................................... 3997.3.4 Mäuse fangen mit Maus-Capturing ............................................ 4027.3.5 Elemente mit MouseMove verschieben ..................................... 4057.3.6 Das Mausrad ............................................................................. 410

Page 8: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

10

7.3.7 Der Mauszeiger ......................................................................... 4117.3.8 Maus-Events nur bei IsHitTestVisible ......................................... 4127.3.9 Hit-Testing mit VisualTreeHelper ............................................... 413

7.4 Stylus ....................................................................................................... 4197.5 Multitouch ............................................................................................... 423

7.5.1 Die Multitouch-Architektur mit Windows 7 ............................... 4237.5.2 Die benötigte Hardware ............................................................. 4247.5.3 Das FrameReported-Event ......................................................... 4257.5.4 Die Klasse TouchPoint ............................................................... 4277.5.5 Einfaches Touch mit Primary TouchPoint ................................... 4287.5.6 Multitouch mit zwei TouchPoints .............................................. 430

7.6 Drag & Drop und Clipboard ...................................................................... 4337.6.1 Drag & Drop .............................................................................. 4337.6.2 Daten im Clipboard ................................................................... 437

7.7 Input Events in FriendStorageOnline ........................................................ 4397.7.1 MouseMove im FishEyePanel .................................................... 4397.7.2 Blubberndes KeyDown im LoginControl ..................................... 4407.7.3 Drag & Drop von Bildern ........................................................... 442

7.8 Zusammenfassung .................................................................................... 445

8 Commands ........................................................................................... 447

8.1 Silverlights Command-Modell ................................................................... 4488.1.1 Das ICommand-Interface ........................................................... 4488.1.2 ButtonBase und Hyperlink zum Ausführen ................................. 448

8.2 Commands implementieren ...................................................................... 4498.2.1 Das FullScreenCommand erstellen ............................................. 4498.2.2 Das FullScreenCommand im UI verwenden ................................ 450

8.3 Das Model-View-ViewModel-Pattern (MVVM) ........................................ 4508.3.1 Der Hintergedanke des Model-View-Controller-Patterns (MVC) 4518.3.2 Die Idee des Model-View-ViewModel-Patterns (MVVM) ........... 4528.3.3 Die Architektur einer Silverlight-Anwendung mit MVVM ........... 4548.3.4 Ein MVVM-Beispiel ................................................................... 455

8.4 Commands und MVVM in FriendStorageOnline ....................................... 4618.4.1 Das FriendStorageCommand ...................................................... 4628.4.2 Die ViewModelBase-Klasse ........................................................ 4638.4.3 Das MainViewModel ................................................................. 4658.4.4 Die MainPage-Codebehind-Datei .............................................. 4678.4.5 Die MainPage-XAML-Datei ....................................................... 468

8.5 Zusammenfassung .................................................................................... 470

Page 9: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

11

TEIL II FORTGESCHRITTENE TECHNIKEN

9 Ressourcen ........................................................................................... 473

9.1 Logische Ressourcen ................................................................................. 4739.1.1 Logische Ressourcen definieren und verwenden ........................ 4749.1.2 Die Suche nach Ressourcen ....................................................... 4769.1.3 Ressourcen mit x:Name ............................................................. 4809.1.4 Ressourcen in C# verwenden ..................................................... 4819.1.5 Ressourcen in separate Dateien auslagern .................................. 4859.1.6 Logische Ressourcen in FriendStorageOnline ............................. 489

9.2 Binäre Ressourcen .................................................................................... 4909.2.1 In die Assembly eingebettete Ressourcen .................................. 4919.2.2 In die Assembly eingebettete Schriften ...................................... 4969.2.3 In die .xap-Datei gepackte Ressourcen ....................................... 4999.2.4 Im Web bereitgestellte Ressourcen ............................................ 5009.2.5 Binäre Ressourcen in FriendStorageOnline ................................. 507

9.3 Zusammenfassung .................................................................................... 509

10 Styles und Templates .......................................................................... 511

10.1 Styles ....................................................................................................... 51110.1.1 Die Style-Grundlagen ................................................................. 51210.1.2 Styles als logische Ressource definieren ..................................... 51310.1.3 Bestehende Styles erweitern ...................................................... 516

10.2 Templates ................................................................................................ 51810.2.1 Arten von Templates .................................................................. 51910.2.2 Layout mit ItemsPanelTemplate ................................................. 52010.2.3 Daten mit DataTemplates visualisieren ...................................... 52110.2.4 Das Aussehen von Controls mit ControlTemplates anpassen ...... 52510.2.5 ControlTemplate mit TemplateBinding verbinden ...................... 52610.2.6 Das Template in einen Style auslagern ....................................... 52910.2.7 Auf Visual States reagieren ......................................................... 53110.2.8 Template Parts beachten ........................................................... 54110.2.9 Der Default-Style mit dem ControlTemplate .............................. 543

10.3 Styles und Templates in FriendStorageOnline ........................................... 54510.3.1 Styles ......................................................................................... 54510.3.2 Templates .................................................................................. 546

10.4 Zusammenfassung .................................................................................... 548

Page 10: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

12

11 Eigene Controls ................................................................................... 551

11.1 CustomControls ........................................................................................ 55211.1.1 Der zu erstellende VideoPlayer .................................................. 55211.1.2 Bibliothek mit einem CustomControl anlegen ............................ 55311.1.3 Template Parts definieren .......................................................... 55711.1.4 Properties implementieren ......................................................... 56111.1.5 Das Aussehen festlegen ............................................................. 56211.1.6 Visual States im Code implementieren ....................................... 56411.1.7 Im ControlTemplate auf Visual States reagieren ......................... 56811.1.8 In der Bibliothek die Xmlns-Attribute hinzufügen ...................... 57011.1.9 Den VideoPlayer testen ............................................................. 57011.1.10 Restyling mit anderem Template ................................................ 573

11.2 UserControls ............................................................................................ 57711.2.1 Das Address-Control hinzufügen ................................................ 57811.2.2 Aussehen und Logik implementieren ......................................... 58011.2.3 Testen des Address-Controls ...................................................... 58211.2.4 Die UserControl-Klasse und vererbte Mitglieder ........................ 583

11.3 Controls in FriendStorageOnline ............................................................... 58311.3.1 Die UserControls in FriendStorageOnline ................................... 58311.3.2 Das FriendCreateControl ............................................................ 583

11.4 Zusammenfassung .................................................................................... 592

12 Daten ................................................................................................... 593

12.1 Data Binding ............................................................................................ 59412.1.1 Data Binding in XAML ............................................................... 59412.1.2 Data Binding in C# ..................................................................... 59512.1.3 Die Binding-Klasse im Detail ...................................................... 59612.1.4 Die Source-Angabe eines Data Bindings ..................................... 59712.1.5 Der DataContext ........................................................................ 59812.1.6 Die Path-Property im Detail ....................................................... 59912.1.7 Die Richtung des Bindings ......................................................... 60112.1.8 Der UpdateSourceTrigger ........................................................... 60212.1.9 Die BindingExpression ............................................................... 60312.1.10 Debugging von Data Bindings .................................................... 605

12.2 Datenquellen eines Data Bindings ............................................................ 60612.2.1 Binding an Dependency Properties ............................................ 60612.2.2 Binding an einfache .NET Properties .......................................... 60612.2.3 Binding an logische Ressourcen ................................................. 609

Page 11: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

13

12.2.4 Binding an Quellen unterschiedlichen Typs ................................ 60912.2.5 Binding an relative Quellen ........................................................ 612

12.3 Data Binding an Collections ...................................................................... 61412.3.1 Benachrichtigung mit INotifyCollectionChanged ........................ 61412.3.2 CollectionViews in Silverlight ..................................................... 61612.3.3 Das Currency Management der CollectionView .......................... 62012.3.4 Master-Detail-Szenarien mit CollectionViews ............................. 62212.3.5 Daten filtern und sortieren ......................................................... 62512.3.6 Daten auf mehrere Seiten verteilen ............................................ 629

12.4 Benutzereingaben validieren ..................................................................... 63212.4.1 Validieren mit Exceptions .......................................................... 63312.4.2 Validieren mit IDataErrorInfo ..................................................... 63412.4.3 Asynchrones Validieren mit INotifyDataErrorInfo ....................... 63712.4.4 Validieren mit ValidationAttributes ............................................ 63912.4.5 Mehrere Fehler mit ValidationSummary anzeigen ...................... 64212.4.6 Das BindingValidationError-Event selbst abfangen ..................... 64412.4.7 Validierungsfehler von Hand auslesen ........................................ 64512.4.8 Die Anzeige von Validierungsfehlern anpassen ........................... 646

12.5 Das DataGrid ............................................................................................ 64712.5.1 Die verwendeten Testdaten ....................................................... 64712.5.2 Autogenerieren von Columns ..................................................... 64912.5.3 Unterschiedliche Column-Typen ................................................ 65112.5.4 Columns manuell zum DataGrid hinzufügen ............................... 65212.5.5 Die Breite einer Column ............................................................ 65412.5.6 Die DataGridTemplateColumn ................................................... 65512.5.7 Datum-Spalte mit der DataGridTemplateColumn ....................... 65612.5.8 ComboBox-Spalte mit der DataGridTemplateColumn ................. 65712.5.9 RowDetails anzeigen .................................................................. 66012.5.10 Daten gruppieren ...................................................................... 66112.5.11 Auswahl von Zeilen und selektierte Daten ................................. 66212.5.12 Bearbeiten von Daten und Verhalten des DataGrids ................... 66412.5.13 Zellen validieren ........................................................................ 66412.5.14 Zeilen validieren ........................................................................ 66712.5.15 Sonstige Mitglieder des DataGrids ............................................. 671

12.6 Daten mit DataTemplates visualisieren ..................................................... 67212.6.1 Einfache DataTemplates ............................................................. 67212.6.2 Hierarchische DataTemplates ..................................................... 674

12.7 Daten in FriendStorageOnline .................................................................. 67712.7.1 Die Entitäten Friend & Co. ......................................................... 67712.7.2 Das MainViewModel im DataContext der MainPage ................. 678

Page 12: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

14

12.7.3 Der Freunde-Explorer der MainPage .......................................... 68212.7.4 Die Detail-Ansicht der MainPage ............................................... 68612.7.5 Vorname eines Friends mit Exceptions validieren ....................... 68912.7.6 Benutzername mit INotifyDataErrorInfo validieren ..................... 69012.7.7 Quelle mit der BindingHelper-Klasse aktualisieren ..................... 694

12.8 Zusammenfassung .................................................................................... 697

13 Services und Kommunikation ............................................................. 699

13.1 Cross-Domain-Zugriffe .............................................................................. 70013.1.1 Die Funktionsweise von Service-Aufrufen .................................. 70113.1.2 Mögliche Zugriffsvarianten auf Online-Inhalte ............................ 70313.1.3 Die clientaccesspolicy.xml-Datei ................................................ 70513.1.4 Die crossdomain.xml-Datei ........................................................ 70813.1.5 Cross-Domain-Zugriffe mit HTTP-Sniffern erkennen ................... 709

13.2 WCF-Services ........................................................................................... 71513.2.1 Ein WCF-Service für Twitter ....................................................... 71613.2.2 Ein WCF-Service mit komplexen Objekten ................................. 72513.2.3 Authentifizierung mit ASP.NET Application Services .................. 73113.2.4 Authentifizierung auf Server- und Client-Seite prüfen ................. 73913.2.5 Rollen mit ASP.NET Application Services ................................... 74213.2.6 Rollen auf Server- und Client-Seite prüfen ................................. 74513.2.7 Zweiseitige Kommunikation mit Duplex Service ......................... 750

13.3 WCF-Data-Services ................................................................................... 75513.3.1 Die Beispieldatenbank ............................................................... 75613.3.2 Das Entity Model erstellen ......................................................... 75713.3.3 Den WCF-Data-Service erstellen ................................................ 76113.3.4 Den WCF-Data-Service über die URL abfragen ........................... 76413.3.5 Den WCF-Data-Service aus Silverlight nutzen ............................ 76613.3.6 Die Abfrage mit HTTP-Sniffern anschauen .................................. 76913.3.7 Abfragen einschränken und sortieren ......................................... 76913.3.8 Ein einfaches Update über den WCF-Data-Service ..................... 771

13.4 WCF-RIA-Services .................................................................................... 77313.4.1 Verbindung Silverlight-Projekt und Webprojekt ......................... 77413.4.2 Das verwendete Entity Model .................................................... 77613.4.3 Den Domain Service erstellen .................................................... 77613.4.4 Den Domain Service aus Silverlight nutzen ................................ 78113.4.5 Insert, Update und Delete ......................................................... 78613.4.6 Daten mit Attributen validieren ................................................. 78913.4.7 Das DomainDataSource-Control verwenden .............................. 79213.4.8 Paging mit dem DomainDataSource-Control .............................. 794

Page 13: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

15

13.4.9 ASP.NET-Authentifizierung mit RIA Services .............................. 79613.4.10 Authentifizierung auf Client- und Server-Seite prüfen ................ 80213.4.11 Authentifizierung mit eigener Benutzerverwaltung ..................... 80613.4.12 Deployment einer WCF-RIA-Service-Anwendung ...................... 813

13.5 Zugriff auf XML, RSS, JSON, ZIP & Co. ...................................................... 81413.5.1 Die Klasse WebClient ................................................................ 81413.5.2 Eine Datei mit WebClient runterladen ....................................... 81613.5.3 Download-Progress anzeigen ..................................................... 81813.5.4 Eine Datei mit WebClient hochladen ......................................... 82013.5.5 Die Klasse HttpWebRequest ...................................................... 82513.5.6 Eine Datei mit HttpWebRequest herunterladen ......................... 82613.5.7 XML-Daten verarbeiten ............................................................. 82813.5.8 Ein einfacher RSS-Reader ........................................................... 83113.5.9 Zugriff auf JSON-Daten .............................................................. 83313.5.10 ZIP-Dateien herunterladen und entpacken ................................. 83813.5.11 BrowserHttp vs. ClientHttp ........................................................ 841

13.6 Socket-Kommunikation ............................................................................ 84213.6.1 Grundlagen zu Sockets ............................................................... 84313.6.2 Sockets in Silverlight .................................................................. 84413.6.3 Den Policy-Server erstellen ........................................................ 84413.6.4 Den App-Server erstellen ........................................................... 84713.6.5 Aus Silverlight auf den App-Server zugreifen .............................. 849

13.7 Services und Kommunikation in FriendStorageOnline ............................... 85213.7.1 Das Entity Model und die Domain Services ................................ 85213.7.2 Benutzername mit Service prüfen .............................................. 85313.7.3 Passwort beim Registrieren im Service hashen ........................... 85613.7.4 Authentifizierung mit WCF-RIA-Services .................................... 85813.7.5 Daten laden mit WCF-RIA-Services ............................................ 863

13.8 Zusammenfassung .................................................................................... 867

14 Isolated Storage .................................................................................. 869

14.1 Grundlagen zum Isolated Storage ............................................................. 86914.1.1 Was ist der Isolated Storage genau? ........................................... 87014.1.2 Der Gültigkeitsbereich des Isolated Storage ............................... 87014.1.3 Was sollten Sie im Isolated Storage abspeichern? ....................... 871

14.2 Auf den Isolated Storage zugreifen ........................................................... 87214.2.1 Die Klassen im Überblick ........................................................... 87214.2.2 Daten schreiben und lesen ......................................................... 87414.2.3 Einfachere Daten schreiben und lesen ........................................ 87614.2.4 Der Konfigurationsdialog des Benutzers ..................................... 877

Page 14: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

16

14.2.5 Die Größe des Isolated Storage erhöhen .................................... 87814.2.6 Komplexe Objekte im Isolated Storage speichern ....................... 88214.2.7 Bilder im Isolated Storage speichern .......................................... 887

14.3 Isolated Storage in FriendStorageOnline ................................................... 89014.3.1 FriendListID im Isolated Storage speichern ................................. 89014.3.2 FriendListID aus dem Isolated Storage auslesen ......................... 891

14.4 Zusammenfassung .................................................................................... 895

TEIL III MULTIMEDIA UND DRUCKEN

15 2D-Grafik ............................................................................................. 899

15.1 Shapes ...................................................................................................... 90015.1.1 Das Rectangle ............................................................................ 90015.1.2 Die Ellipse ................................................................................. 90115.1.3 Einfache Linien mit Line ............................................................. 90215.1.4 Komplexe Linien mit Polyline ..................................................... 90215.1.5 Komplexe Formen mit Polygon .................................................. 90315.1.6 Ein Smilie aus Shapes ................................................................. 90515.1.7 Die Stroke-Properties der Shape-Klasse ..................................... 90715.1.8 Spezielle Formen mit der Path-Klasse ........................................ 909

15.2 Geometries ............................................................................................... 90915.2.1 RectangleGeometry ................................................................... 91015.2.2 EllipseGeometry ......................................................................... 91115.2.3 LineGeometry ............................................................................ 91215.2.4 Mehrere Geometry-Objekte gruppieren ..................................... 91215.2.5 Komplexe Formen mit der PathGeometry .................................. 91315.2.6 Die Path-Markup-Syntax ............................................................ 91615.2.7 Clipping mit Geometry-Objekten ............................................... 918

15.3 Cached Compositions ............................................................................... 91915.3.1 BitmapCache für ein Element aktivieren ..................................... 91915.3.2 Nebeneffekte des Cachings ........................................................ 920

15.4 Brushes .................................................................................................... 92315.4.1 Der SolidColorBrush und die Color-Struktur ............................... 92415.4.2 Farbverläufe mit GradientBrushes .............................................. 92515.4.3 Lineare Farbverläufe mit LinearGradientBrush ............................ 92515.4.4 Runde Farbverläufe mit dem RadialGradientBrush ..................... 92715.4.5 Transparenz mit GradientBrushes ............................................... 92815.4.6 Die abstrakte Klasse TileBrush .................................................... 92915.4.7 Bilder zeichnen mit dem ImageBrush ......................................... 930

Page 15: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

17

15.4.8 Videos pinseln mit dem VideoBrush ........................................... 93115.4.9 Webinhalte malen mit dem WebBrowserBrush .......................... 93215.4.10 Der ImplicitInputBrush .............................................................. 934

15.5 Effekte ...................................................................................................... 93415.5.1 Die Effekt-Klassen ...................................................................... 93415.5.2 Unschärfe mit dem BlurEffect ..................................................... 93515.5.3 Schatten mit dem DropShadowEffect ......................................... 93515.5.4 Effekte mit eigenen Pixel-Shadern erstellen ................................ 93715.5.5 Pixel-Shader mit weiteren Properties ......................................... 943

15.6 Bildquellen ............................................................................................... 94715.6.1 Die Klasse BitmapImage ............................................................ 94715.6.2 Dynamische Bilder mit WritableBitmap ...................................... 949

15.7 2D-Grafik in FriendStorageOnline ............................................................. 95415.7.1 Der Blur-Effekt beim Anzeigen der Rückseite ............................. 95415.7.2 Die Navigationsbuttons von FriendStorageOnline ...................... 95715.7.3 Das Bild eines Freundes ............................................................. 957

15.8 Zusammenfassung .................................................................................... 960

16 Animationen ........................................................................................ 963

16.1 Grundlagen .............................................................................................. 96416.1.1 Die Animationsklassen und -arten .............................................. 96416.1.2 Die Klasse Timeline .................................................................... 96616.1.3 Die Klasse Storyboard ................................................................ 96616.1.4 Eine einfache Animation in XAML erstellen ............................... 96716.1.5 Eine einfache Animation in C# erstellen ..................................... 969

16.2 Basis-Animationen .................................................................................... 97016.2.1 Die Properties From/To/By ........................................................ 97016.2.2 Dauer, Startzeit und Geschwindigkeit ........................................ 97116.2.3 Rückwärts und Wiederholen ...................................................... 97316.2.4 Die Gesamtlänge einer Timeline ................................................. 97416.2.5 Das Füllverhalten einer Animation ............................................. 97416.2.6 Animationen mit dem Storyboard kontrollieren ......................... 97516.2.7 Mehrere Animationen im Storyboard ......................................... 977

16.3 Keyframe-Animationen ............................................................................. 97916.3.1 Lineare Keyframe-Animationen .................................................. 98016.3.2 SplineKeyframe-Animationen ..................................................... 98116.3.3 Diskrete Keyframe-Animationen ................................................ 982

16.4 Easing Functions ....................................................................................... 98516.4.1 Grundlagen ................................................................................ 985

Page 16: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

18

16.4.2 Easing Functions in Basis-Animationen ...................................... 98816.4.3 Easing Functions in Keyframe-Animationen ............................... 99016.4.4 Eigene Easing Functions erstellen ............................................... 992

16.5 Low-Level-Animationen ........................................................................... 99216.5.1 Eine einfache Low-Level-Animation ........................................... 99316.5.2 Ein 2D-Jump-and-Run mit Low-Level-Animationen ................... 994

16.6 Animationen in FriendStorageOnline ........................................................ 99716.7 Zusammenfassung .................................................................................... 999

17 Multimedia .......................................................................................... 1001

17.1 Audio und Video ...................................................................................... 100117.1.1 Die unterstützten Formate ......................................................... 100217.1.2 Eine Audiodatei abspielen ......................................................... 100217.1.3 Eine Videodatei abspielen .......................................................... 100317.1.4 Auf Fehler reagieren .................................................................. 100517.1.5 Das Abspielen steuern ............................................................... 100517.1.6 Video Marker verwenden .......................................................... 101117.1.7 Den Downloadvorgang darstellen .............................................. 101317.1.8 Buffering im MediaElement ....................................................... 101517.1.9 Wiedergabelisten abspielen ....................................................... 101617.1.10 Weitere Audio/Video-Features .................................................. 1018

17.2 Webcam und Mikrofon ............................................................................ 101917.2.1 Auf die Webcam des Benutzers zugreifen ................................... 101917.2.2 Mit der Webcam ein Bild knipsen .............................................. 102317.2.3 Rohdaten mit VideoSink verarbeiten .......................................... 102617.2.4 Auf das Mikrofon des Benutzers zugreifen .................................. 1027

17.3 Deep Zoom .............................................................................................. 103017.3.1 Bildersammlung im Deep Zoom Composer erstellen .................. 103117.3.2 Die Bildersammlung in Silverlight verwenden ............................. 1034

17.4 Zusammenfassung .................................................................................... 1037

18 Drucken ............................................................................................... 1039

18.1 Drucken in Silverlight ............................................................................... 103918.1.1 Ein einfacher Ausdruck .............................................................. 103918.1.2 Die Klasse PrintDocument im Detail .......................................... 104318.1.3 Einfacher Ausdruck über mehrere Seiten .................................... 104418.1.4 Collections über mehrere Seiten drucken ................................... 104618.1.5 Ein DataGrid über mehrere Seiten drucken ................................ 1049

Page 17: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

19

18.2 Drucken in FriendStorageOnline ............................................................... 105318.2.1 Drucken mit Silverlight .............................................................. 105418.2.2 Drucken mit ASP.NET/JavaScript ................................................ 1061

18.3 Zusammenfassung .................................................................................... 1068

TEIL IV APPLIKATIONEN UND INTEGRATION

19 Applikationen ...................................................................................... 1071

19.1 Webanwendungen ................................................................................... 107219.1.1 Der OpenFileDialog ................................................................... 107219.1.2 Der OpenFileDialog in FriendStorageOnline .............................. 107419.1.3 Der SaveFileDialog ..................................................................... 107519.1.4 Eine kleine Anwendung mit den Dialogen ................................. 1077

19.2 Out-of-Browser-Anwendungen ................................................................ 108119.2.1 Eine Out-of-Browser-Anwendung erstellen ................................ 108119.2.2 Die Anwendung konfigurieren ................................................... 108419.2.3 Anwendung programmatisch installieren ................................... 108919.2.4 Prüfen, ob die Anwendung »Out of Browser« läuft ..................... 109019.2.5 Auf das Out-of-Browser-Fenster zugreifen ................................. 109119.2.6 Netzwerkstatus prüfen ............................................................... 109219.2.7 Anwendungsupdates prüfen ...................................................... 109219.2.8 Meldungen mit dem NotificationWindow anzeigen ................... 109419.2.9 OOB-Anwendungen direkt installieren ...................................... 1095

19.3 Vertrauenswürdige Out-of-Browser-Anwendungen .................................. 109619.3.1 Die .xap-Datei signieren ............................................................ 109719.3.2 Vertrauensstellung im Code prüfen ............................................ 109919.3.3 Auf lokale Dateien zugreifen ...................................................... 110019.3.4 Notepad und cmd via COM-Interop .......................................... 110219.3.5 Excel-Export via COM-Interop ................................................... 1104

19.4 Navigationsanwendungen ........................................................................ 110719.4.1 Die Navigationsklassen .............................................................. 110719.4.2 Eine einfache Navigationsanwendung ........................................ 110819.4.3 URIs mit dem UriMapper anpassen ............................................ 111019.4.4 NavigationsService und NavigationsContext ............................... 111219.4.5 Die Navigationsanwendungs-Vorlage in Visual Studio ................ 111319.4.6 Die Business-Application-Vorlage in Visual Studio ..................... 1115

19.5 Windows-Phone-Anwendungen ............................................................... 111719.5.1 Die Voraussetzungen ................................................................. 111719.5.2 Ein kleines Windows-Phone-Projekt .......................................... 1117

19.6 Zusammenfassung .................................................................................... 1123

Page 18: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Inhalt

20

20 Browser, HTML und JavaScript ........................................................... 1125

20.1 Details des Silverlight-Plugins ................................................................... 112520.1.1 Die Klasse SilverlightHost .......................................................... 112620.1.2 Der Vollbildmodus ..................................................................... 112720.1.3 Einschränkungen im Vollbildmodus ........................................... 1129

20.2 Der Browser und HTML ............................................................................ 113020.2.1 Die Klassen für den HTML-Zugriff .............................................. 113020.2.2 Browserinformationen auslesen ................................................. 113120.2.3 Seiten öffnen mit dem HtmlWindow .......................................... 113220.2.4 Den Inhalt der HTML-Seite auslesen .......................................... 113520.2.5 Auf ein bestimmtes HTML-Element zugreifen ............................ 113620.2.6 JavaScript-Eventhandler für HTML-Elemente ............................. 1138

20.3 Zugriff auf JavaScript ................................................................................. 114120.3.1 JavaScript-Methoden aus Silverlight aufrufen ............................. 114120.3.2 Silverlight-Methoden aus JavaScript aufrufen ............................. 114220.3.3 Silverlight-Objekte in JavaScript instantiieren ............................. 1145

20.4 Nachrichten zwischen Silverlight-Anwendungen ....................................... 114820.4.1 Die Klassen der Local Messaging API ......................................... 114820.4.2 Zwei Silverlight-Anwendungen in eine Seite einbetten ............... 115020.4.3 Die empfangende Silverlight-Anwendung .................................. 115120.4.4 Die sendende Silverlight-Anwendung ........................................ 115220.4.5 Den Nachrichtenaustausch testen .............................................. 1153

20.5 Zusammenfassung .................................................................................... 1154

Index ........................................................................................................................... 1157

Page 19: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

25

Bevor wir starten, hier noch ein paar Hinweise, wie Sie am besten mit diesem Buch arbeiten. Auf den folgenden Seiten finden Sie kurze Informationen zu den Kapiteln, Hinweise zu den Beispielen und ein paar Darstellungskonventionen.

Hinweise zum Buch

In den folgenden Abschnitten lesen Sie Informationen rund um das Silverlight-Buch an sich.Lesen Sie sich die Abschnitte kurz durch, um zu erfahren, wie das Buch aufgebaut ist, welcheVoraussetzungen an Ihren Rechner zum Entwickeln von Silverlight-Anwendungen gestelltwerden, wie in den folgenden Kapiteln Beispiele angegeben werden und welche Darstellungs-konventionen gelten. Falls Sie dieses Buch noch nicht gekauft haben, sondern es gerade erstin den Händen halten, lesen Sie sich unbedingt den ersten Abschnitt durch, um abzuwägen,ob dieses Buch für Sie geeignet ist.

Für wen ist dieses Buch gedacht?

Sie sollten über eine gute Portion an C#-Know-how und etwas Wissen rund um das .NETFramework verfügen. Wenn Sie mit Delegates, Events oder anonymen Methoden in Kontaktkommen, sollte Ihr nächster Gedanke nicht jener sein, gleich eine Suchmaschine aufzusuchen.Das vorliegende Buch verwendet auch einige Features, die in der dritten Version von C# hin-zugekommen sind, wie beispielsweise Lambda-Expressions oder die Syntax für die LanguageIntegrated Query (LINQ).

Falls Sie noch keine Erfahrungen mit .NET und C# haben, sollten Sie vorab ein anderes Buchmit den notwendigen Grundlagen lesen. Ich kann Ihnen z. B. »Visual C# 2010 – Das umfas-sende Handbuch« von Andreas Kühnel empfehlen, das ebenfalls bei Galileo Press erschienenist.

Das vorliegende Buch richtet sich somit einerseits an .NET-Entwickler, die in die Silverlight-Entwicklung einsteigen möchten, andererseits an Entwickler, die bereits Silverlight-Anwen-dungen geschrieben haben und ihr Wissen in bestimmten Bereichen noch vertiefen möchten.

Neben Kenntnissen zum .NET Framework und in C# sind Erfahrungen mit der Windows Pre-sentation Foundation (WPF) für dieses Buch und zum Erlernen von Silverlight von Vorteil,jedoch nicht erforderlich. Das vorliegende Buch vermittelt Ihnen neben den notwendigenKenntnissen, die Sie zum Entwickeln von Silverlight-Anwendungen benötigen, viele Hinter-

Page 20: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

26

Hinweise zum Buch

grundinformationen über gängige Konzepte in Silverlight, die aus der WPF übernommenwurden. Dazu zählen unter anderem die Extensible Application Markup Language (XAML),Dependency Properties, Ressourcen, Styles und Templates.

Das vorliegende Buch richtet sich nicht an Designer, sondern primär an Entwickler. Microsoftstellt mit Expression Blend ein Werkzeug zum Designen von Silverlight-Anwendungen zurVerfügung. Das Werkzeug kommt beim Entwickeln von professionellen Silverlight- und WPF-Projekten neben Visual Studio stets zum Einsatz, da es einige Dinge erleichtert. Beispielsweiselassen sich in Expression Blend sehr einfach Farbverläufe definieren. Expression Blend machtnichts anderes, als im Hintergrund XAML-Code zu generieren. Allerdings werden Sie stetsbestimmte Dinge in XAML manuell erledigen. Somit ist es wichtig, dass Sie die XAML-Funk-tionsweise und -Syntax verstehen. Das ist vergleichbar mit HTML: Haben Sie bereits Websei-ten entwickelt und dafür Programme wie Frontpage oder Dreamweaver eingesetzt, werdenSie bestimmt für komplexere Fälle auch den HTML-Code manuell editiert haben, um dengewünschten Output zu erreichen. Expression Blend wird an einigen Stellen dieses Buchesgezeigt, allerdings lege ich den primären Fokus ganz klar auf den Code. Nur wenn Sie diesenverstehen, werden Sie die Karriereleiter als Silverlight-Entwickler steil nach oben klettern.

Aufbau des Buches

Die 20 Kapitel in diesem Buch lassen sich grob in die folgenden vier Gruppen einordnen.Während ich hier die Gruppen beschreibe, finden Sie am Anfang eines jeden Kapitels einedetailliertere Beschreibung zum Inhalt.

� Grundlagen und KonzepteMit den in dieser Gruppe vermittelten Grundlagen sind Sie in der Lage, einfache Silver-light-Anwendungen zu entwickeln. Lernen Sie, wie eine Silverlight-Anwendung geladenwird, erfahren Sie mehr über die Funktionsweise von XAML und die Controls von Silver-light. Verknüpfen Sie Ihr Wissen mit den Layout-Möglichkeiten von Silverlight, und Siesind in der Lage, komplexe Oberflächen zu gestalten. Mit Input Events lernen Sie, wie SieEingaben des Benutzers verarbeiten, und Commands zeigen Ihnen, wie Sie eine strikteTrennung zwischen UI und UI-Logik erreichen.

Hinweis

Das Buch ist auf die Version 4.0 von Silverlight zugeschnitten. Die JavaScript-API, die in der Ver-sion 1.0 von Silverlight genutzt wurde, behandele ich nicht. Verwechseln Sie die JavaScript-APIallerdings nicht mit dem Zugriff auf JavaScript. Wie Sie aus Silverlight JavaScript-Methoden aufru-fen und wie Sie umgekehrt aus JavaScript auf Silverlight-Methoden zugreifen, erläutere ich sehrwohl. Mehr dazu lesen Sie in Kapitel 20, »Browser, HTML und JavaScript«.

Page 21: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

27

Hinweise zum Buch

� Kapitel 1: Einführung in Silverlight

� Kapitel 2: Das Programmiermodell

� Kapitel 3: XAML

� Kapitel 4: Controls

� Kapitel 5: Layout

� Kapitel 6: Dependency Properties

� Kapitel 7: Input Events

� Kapitel 8: Commands

� Fortgeschrittene TechnikenSilverlight ist ein mächtiges Framework, das einige fortgeschrittene Techniken anbietet.Mit Ressourcen legen Sie Elemente zentral ab. Mit Styles und Templates passen Sie dasAussehen Ihrer Elemente an, um Ihr Corporate Design perfekt umzusetzen. Dabei lernenSie auch, wie Sie eigene Controls erstellen. Diese Gruppe behandelt zudem den wichtigstenTeil für Geschäftsanwendungen: Wie binden Sie Ihre Oberfläche an Daten, und wie ladenSie diese Daten über Services in Ihre Silverlight-Anwendung? Sie erfahren außerdem, wieSie Daten lokal im Isolated Storage abspeichern.

� Kapitel 9: Ressourcen

� Kapitel 10: Styles und Templates

� Kapitel 11: Eigene Controls

� Kapitel 12: Daten

� Kapitel 13: Services und Kommunikation

� Kapitel 14: Isolated Storage

� Grafik, Animationen, Multimedia und DruckenDie Gruppe »Grafik, Animationen, Multimedia und Drucken« behandelt genau das, wasder Gruppenname verspricht. Lernen Sie, wie Sie Brushes verwenden und Bitmaps gene-rieren und wie Sie professionelle Animationen auf einfache Weise mit den Easing Func-tions erstellen. Im Multimedia-Kapitel zeige ich, wie Sie Videos und Deep Zoom verwen-den. Dort erfahren Sie auch, wie Sie auf die Webcam und das Mikrofon des Clientszugreifen. Im Drucken-Kapitel lernen Sie, wie Sie aus Ihrer Silverlight-Anwendung einenprofessionellen Ausdruck generieren.

� Kapitel 15: 2D-Grafik

� Kapitel 16: Animationen

� Kapitel 17: Multimedia

� Kapitel 18: Drucken

� Applikationen und BrowserintegrationMit Silverlight lassen sich nicht nur Webanwendungen entwickeln. Im Applikationen-Ka-

Page 22: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

28

Hinweise zum Buch

pitel lesen Sie mehr zum Entwickeln der sogenannten Out-of-Browser-Anwendungen(OOB). Diese laufen in einem eigenen Fenster wie eine klassische Desktopanwendung ab.Nutzen Sie eine vertrauenswürdige OOB-Anwendung, wenn Sie beispielsweise über COM-Interop Daten nach Excel exportieren möchten. Auch ein Zugriff auf das lokale Dateisystemist möglich. Im Applikationen-Kapitel lesen Sie auch, wie Sie mit Silverlight Applikationenfür Handys entwickeln. Silverlight ist die zentrale Technologie zum Entwickeln von An-wendungen unter Microsofts neuem Smartphone-Betriebssystem Windows Phone 7. InKapitel 20 lernen Sie, wie Sie aus Ihrer Silverlight-Anwendung mit umgebenden HTML-Elementen kommunizieren. Rufen Sie JavaScript-Methoden auf, oder rufen Sie aus Java-Script eine Methode Ihrer Silverlight-Anwendung auf. Diese Szenarien sind insbesonderedann interessant, wenn Sie eine Silverlight-Anwendung in eine bestehende Webseite inte-grieren.

� Kapitel 19: Applikationen

� Kapitel 20: Browser, HTML & JavaScript

Wie Sie das Buch lesen

Das Buch eignet sich, um bei Kapitel 1 zu beginnen und sich von dort Schritt für Schritt zuKapitel 20 hinzuarbeiten. Am Ende jedes Kapitels folgt eine Zusammenfassung der wichtigs-ten Punkte. Daran können Sie grob kontrollieren, ob Sie die wichtigsten Inhalte eines Kapitelsaufgenommen haben.

Gehören Sie nicht zu den Lesern, die Bücher von vorn nach hinten durcharbeiten, können Siesich natürlich auch einzelne Kapitel herauspicken und diese als Nachschlagelektüre verwen-den. Beim Schreiben des Buchs habe ich darauf geachtet, die einzelnen Kapitel möglichstunabhängig voneinander zu gestalten. Allerdings sollten einzelne Kapitel nicht immer alleswiederholen müssen, was in vorherigen Kapiteln bereits erläutert wurde. Somit benötigen Siefür spätere Kapitel dieses Buchs meist ein Basiswissen, das Sie entweder bereits haben odereben erlangen, indem Sie die vorherigen Kapitel durcharbeiten.

Systemvoraussetzungen

Alle Beispiele in diesem Buch wurden mit der deutschen Version von Visual Studio 2010 Ulti-mate auf Windows 7 entwickelt. Es wurden zusätzlich die finalen Silverlight-Tools installiert,die zum Entwickeln von Silverlight 4.0-Anwendungen benötigt werden. Damit Sie also gleich

Hinweis

Das Buch verwendet aus didaktischen Gründen an manchen Stellen bewusst Wiederholungen. Soerhalten Sie beispielsweise im ersten Kapitel einen Überblick über die Silverlight-Konzepte. In spä-teren Kapiteln werden diese Konzepte wiederholt und vertieft.

Page 23: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

29

Hinweise zum Buch

loslegen und die Beispiele der Buch-DVD ausprobieren können, sollten Sie auf Ihrem RechnerFolgendes installieren:

� als Betriebssystem mindestens Windows XP mit den aktuellen Service Packs, besser aberWindows Vista oder Windows 7

� als Entwicklungsumgebung Visual Studio 2010 Ultimate

� die Silverlight Tools für Silverlight 4.0, damit sich in Visual Studio 2010 Silverlight 4.0-An-wendungen erstellen lassen

Eine deutsche Trial-Version von Visual Studio 2010 Ultimate können Sie unter folgendemLink herunterladen:

http://www.microsoft.com/germany/visualstudio/try/download.aspx

Um in Visual Studio 2010 Silverlight 4.0-Anwendungen entwickeln zu können, benötigen Sieauch die Silverlight-Tools. Diese finden Sie unter folgendem Link:

http://go.microsoft.com/fwlink/?LinkID=177428

Achten Sie beim Herunterladen der Silverlight-Tools auf die Spracheinstellung. Für die deut-sche Visual-Studio-Version benötigen Sie die Silverlight-Tools in Deutsch, für die englischeVisual-Studio-Version benötigen Sie die Silverlight-Tools in Englisch, sonst erhalten Sie beider Installation eine Fehlermeldung.

Jetzt haben Sie alles, was Sie benötigen, und können mit dem Entwickeln loslegen.

Hinweis

Statt mit der Visual Studio 2010 Ultimate lassen sich Silverlight-Anwendungen auch mit anderenVisual-Studio-Versionen sowie dem frei verfügbaren Visual Web Developer Express 2010 ent-wickeln. Sie finden ihn auf der Buch-DVD oder unter folgendem Link:

http://www.microsoft.com/germany/express/products/web.aspx

Tipp

Sie finden auf der offiziellen Seite von Silverlight ebenfalls eine Beschreibung und Links zu denWerkzeugen, die Sie zum Entwickeln von Silverlight-Anwendungen benötigen, und zwar unter fol-gendem Link:

http://www.silverlight.net/getstarted/

Die Seite www.silverlight.net enthält viele weitere spannende Inhalte. Unter anderem gibt es einForum sowie reichlich Videos und viel Beispielmaterial rund um das Thema Silverlight. Im Forumwerden Sie mit etwas Glück auch den Autor dieses Buches antreffen.

Page 24: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

30

Hinweise zum Buch

Obwohl Sie bereits alles Notwendige zum Entwickeln haben, sollten Sie sich noch die Silver-light-Dokumentation installieren. Diese enthält Informationen und Beispielcode zu den Klas-sen von Silverlight. Laden Sie sich die Offline-Dokumentation unter folgendem Link herunter:

http://go.microsoft.com/fwlink/?LinkID=167824

Codebeispiele

Alle Codebeispiele dieses Buches sind auf der Buch-DVD enthalten. Sie finden Sie im OrdnerBeispiele, der den entsprechenden Quellcode aller Beispiele enthält. Diesen Ordner sollten Sieauf Ihre lokale Platte entpacken, um dort die Beispiele zu kompilieren und zu starten.

Beispiele zu einem Kapitel

Der Beispiele-Ordner auf der Buch-DVD enthält eine nach Kapiteln aufgebaute Ordnerstruktur.Das bedeutet, Sie finden für jedes Kapitel einen Ordner: K01, K02, K03 usw. So liegen die Bei-spiele für Kapitel 5, »Layout«, im Ordner K05. Unter den Codeausschnitten in diesem Buchgebe ich in der Unterschrift den Pfad zur Datei im Beispiele-Ordner an, die den dargestelltenCode enthält. Nachfolgend ein Codeausschnitt aus Kapitel 5, »Layout«; beachten Sie die Unter-schrift:

<Button Width="100" RenderTransformOrigin="0.5,0.5"

Background="Red" Content="Origin(0.5,0.5)" >

<Button.RenderTransform>

<RotateTransform Angle="45"/>

</Button.RenderTransform>

</Button>

Listing 5.6 K05\09 RenderTransformOrigin\MainPage.xaml

Den Code aus Listing 5.6 finden Sie, wie in der Unterschrift angegeben, in der Datei Main-Page.xaml im Ordner K05\09 RenderTransformOrigin des Beispiele-Ordners der Buch-DVD.

Hinweis

Als optionales Programm empfehle ich Ihnen zusätzlich Red Gates Reflector. Das ist ein frei verfüg-bares Programm, mit dem Sie den Inhalt von kompilierten Silverlight-Assemblies (.dll-Dateien)betrachten können. So lassen sich auch die zu Silverlight gehörenden, von Microsoft ausgeliefertenAssemblies mit all ihren Namespaces und Methoden ansehen. Dies kann bei Verständnisproble-men sehr hilfreich sein. Red Gates Reflector finden Sie unter folgendem Link:

http://reflector.red-gate.com

Page 25: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

31

Hinweise zum Buch

Kapitelübergreifende Beispiele

Neben den Kapitelordnern wie K04 und K05 enthält der Beispiele-Ordner auch kapitelüber-greifende Beispiele. Kapitelübergreifend ist unter anderem der Quellcode der in diesem Buchdurchgängig verwendeten Anwendung FriendStorageOnline. Die kapitelübergreifenden Bei-spiele sind auf gleicher Ebene wie die Kapitelordner zu finden. Ein Ausschnitt des Beispiele-Ordners enthält somit die folgenden Ordner:

� FriendStorageOnline

� K01

� K02

� K03

� usw.

Darstellungskonventionen

Wie auch Silverlight-Anwendungen ein durchgängiges Designkonzept verwenden sollten, somacht es auch dieses Buch. Hier ein paar Hinweise zur Darstellung von Text, Code und Bemer-kungen.

Textdarstellung

Pfade zu Dateien und Verzeichnissen werden im Fließtext C:\In\Der\PfadFormatierunggeschrieben. Tritt ein wichtiger Begriff das erste Mal auf, wird er in der Begriff-Formatierungdargestellt.

Codedarstellung

Codebeispiele sind immer in der Codeformatierung dargestellt. Wie im vorherigen Abschnittbereits erwähnt, werden die meisten Codebeispiele in diesem Buch mit einer Unterschrift ver-sehen. Die Unterschrift enthält entweder einen Pfad zur Quelldatei in der Beispiele.zip-Dateioder eine kurze Beschreibung des dargestellten Codes. Sehr kurze, selbsterklärende Codebei-spiele besitzen keine Unterschrift.

An vielen Stellen dieses Buches ist eine vollständige Darstellung einer Quellcode-Datei nichtnotwendig und würde den Sachverhalt nur komplizierter darstellen, als er tatsächlich ist. Ent-weder wird aus einer solchen Quellcode-Datei in einem Listing nur ein zusammenhängenderAusschnitt dargestellt, oder es werden einzelne Codeabschnitte weggelassen. Auf nichtgezeigte Codeabschnitte wird im Listing, soweit sich die Codeabschnitte nicht am Anfang oderEnde des dargestellten Codeausschnitts befinden, mit drei Punkten – ... – hingewiesen.

Page 26: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

32

Hinweise zum Buch

Bemerkungen

Um den Fließtext etwas kompakter zu gestalten und besondere Informationen zusätzlich her-vorzuheben, finden Sie in den Kapiteln dieses Buches einige Bemerkungen in Kästen darge-stellt. Es werden dabei drei Arten von Bemerkungen verwendet: Tipp, Achtung und Hinweis.

Etwas zu Anglizismen

»Kommen Sie zu uns ins Office in unserer neuen Location in ...« – warum nicht einfach »Büro«und »Standort« statt »Office« und »Location«? Ich bin wirklich kein Fan von Anglizismen.Allerdings sehe ich in der Softwareentwicklung eine Ausnahme. Für einige Begriffe in diesemFachbuch ist es meines Erachtens wenig sinnvoll, sie ins Deutsche zu übertragen. Dieses Buchverwendet daher an vielen Stellen durchgängig die englischen Originalwörter und -begriffe.Diese Entscheidung ist gefallen, da einerseits eine deutsche Variante eines Begriffs oft zu Miss-verständnissen führt und es andererseits in Silverlight Begriffe wie beispielsweise DependencyProperties gibt, für die in der Entwicklerszene einfach kein konsistentes deutsches Pendantexistiert. Es wird daher auch unter deutschsprachigen Silverlight-Entwicklern von »Depen-dency Properties« und nicht von »Abhängigkeitseigenschaften« gesprochen (auch wenn dieDependency Properties in der deutschen Silverlight-Dokumentation so bezeichnet werden).

Aufgrund dieser Tatsache finden Sie in diesem Buch die englischen Originalbegriffe wieDependency Properties, Routed Events, Commands, Markup Extensions etc. Diese Begriffegehen meist mit den Namen der Klassen einher, die für die entsprechende Funktionalität ver-wendet werden. Für Dependency Properties haben Sie die Klassen DependencyObject undDependencyProperty, für Routed Events die Klasse RoutedEvent usw.

Auch Steuerelemente bezeichne ich durchgängig als Controls, die .NET-Eigenschaften einesObjekts als Properties und die »Behandlungsmethoden« für ein Event als Eventhandler.

Tipp

Ein Tipp gibt Ihnen etwas Nützliches mit auf den Weg. Der Tipp kann in manchen Situationen sehrhilfreich sein.

Achtung

Dieser Kasten weist Sie explizit auf ein eventuell auftretendes Problem, mögliche Stolperfallen oderetwas extrem Wichtiges hin.

Hinweis

Ein Hinweis-Kasten hebt wichtige Details hervor oder erläutert einen Sachverhalt noch etwas tief-gründiger.

Page 27: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

35

Die aktuellen Technologien der Webentwicklung sowie Silverlight und dessen wichtigste Konzepte lernen Sie in diesem Kapitel näher kennen. Sehen Sie dieses Kapitel dabei als eine lockere Aufwärmrunde an, bevor es richtig losgeht.

1 Einführung in Silverlight

Silverlight, das Plugin, das Grafiken, Videos und Vektoranimationen in einem Bereich einerWebseite anzeigt, ist keine komplett neue Erfindung. Andere Technologien, wie ActiveX oderAdobe Flash, haben eine ähnliche Funktionsweise. Allerdings eignet sich Silverlight nebenWeb-Anwendungen auch zum Entwickeln von Applikationen, die wie eine Desktop-Anwen-dung außerhalb des Browsers oder sogar auf dem Smartphone-Betriebssystem WindowsPhone 7 laufen. Wir beschränken uns hier auf die Web-Sicht. Mehr zu den sogenannten Out-Of-Browser-Anwendungen und Windows Phone 7 lesen Sie in Kapitel 19, »Applikationen«.Wir starten dieses Kapitel in Abschnitt 1.1 mit einem Rundumblick auf die clientseitigen Tech-nologien und Sprachen von Webanwendungen. Dieser Überblick soll als lockerer Einstieg die-nen und den Weg zu Silverlight aufzeigen.

In Abschnitt 1.2 erhalten Sie das notwendige Wissen über das Silverlight-Plugin, über die Stär-ken und Schwächen von Silverlight, über die Architektur und über den Ladevorgang und dasRendering. Außerdem erfahren Sie mehr über die Neuerungen, die in Version 4 hinzugekom-men sind.

Der letzte Abschnitt dieses Einführungskapitels gibt Ihnen einen Überblick über die Konzeptevon Silverlight. Dazu zählt unter anderem XAML, die XML-basierte Beschreibungssprache, die inSilverlight zum Definieren des User Interfaces verwendet wird. Zu den Konzepten gehören auchDependency Properties, Routed Events, Ressourcen, Styles, Templates, Data Binding und 3D.

Wie der Anleser dieses Kapitels bereits andeutet, dient dieses Kapitel als lockerer Einstieg und»Aufwärmrunde«. Lehnen Sie sich also zurück, und lassen Sie es ruhig angehen. Die wichtig-sten Teile dieses Kapitels werden in späteren Kapiteln wiederholt und vertieft.

1.1 Aktuelle Technologien der Webentwicklung

In diesem Abschnitt lernen Sie die wichtigsten clientseitigen Technologien und Sprachen derWebentwicklung kennen, angefangen von HTML über klassisches CSS bis hin zu Plugins wieAdobe Flash.

Page 28: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

36

Einführung in Silverlight1

1.1.1 HTML

Die Hypertext Markup Language (HTML) entstand Anfang der 90er Jahre. Mit neuer Softwarefür Endanwender sollten sich Webseiten betrachten lassen, die in der Hypertext Markup Lan-guage (HTML) geschrieben wurden und über das Hypertext Transfer Protocol (HTTP) geladenwerden. Heute ist uns die damals »neue Software« als Browser bekannt.

HTML wurde von einer Markup-Sprache zum einfachen Erstellen von Text mit Hyperlinksschnell umfangreicher, und schon bald konnten mit dem img-Tag auch Bilder angezeigt wer-den. Mosaic war der erste bekannte Browser, der diese neuen multimedialen Inhalte darstel-len konnte.

Die Verbreitung von HTML nahm rasend zu, doch damit stieg auch der Bedarf nach einer Nor-mierung. Dan Conolly war einer der Antreiber. Er war in der bereits standardisierten Stan-dard Generalized Markup Language (SGML) sehr erfahren und machte auch aus HTML eineSGML-konforme Sprache. Allerdings hatten die ersten beiden Versionen von HTML nochreichlich Lücken. Entwickler fanden nicht alles, was sie von HTML erwarteten. So kam es, dasssich namhafte Hersteller wie Microsoft oder Netscape im Kampf um den besten Browser dasRecht herausnahmen, in Ihren Produkten mehr HTML-Tags als vom Standard vorgegeben zuunterstützen. Eine Abstimmung mit dem W3-Konsortium (W3C), das für Webstandards ver-antwortlich ist, fand nicht statt. So hatten Netscape und Microsoft jeweils einen Browser, derproprietäre HTML-Tags unterstützte. Folglich konnte man bei einer für den Microsoft InternetExplorer entwickelten Webseite nicht davon ausgehen, dass der Navigator von Netscape alleHTML-Tags unterstützte und die Seite auch richtig anzeigte. Diese Probleme gibt es auch heutenoch. Eine für den Internet Explorer entwickelte Webseite sieht im Firefox aufgrund andersoder nicht interpretierter Tags und Attribute möglicherweise anders aus.

Entwickeln Sie heute eine Webseite, kommen Sie nicht an HTML vorbei. Auch eine Silver-light-Anwendung wird in eine HTML-Seite eingebettet, doch dazu später mehr.

Mit der weiteren Entwicklung von HTML wurde bereits in den 90er Jahren auch der Bedarfnach Interaktivität auf einer Webseite größer. Dies war der Einstieg in die JavaScript-Welt.

1.1.2 JavaScript

Netscape veröffentlichte 1995 eine Vorabversion ihres Navigators 2.0. Der Navigator 2.0hatte die neue Funktionalität, Webseiten mit Hilfe von eingebetteten Scriptprogrammendynamisch zu gestalten. Die dafür entwickelte Programmiersprache taufte Netscape Live-Script. Doch der Name lebte nicht lange – 1996 gaben Netscape und Sun den neuen NamenJavaScript bekannt. Obwohl JavaScript nichts mit Java zu tun hat, sollte der Java-Boom auchhier genutzt werden, und der ähnliche Name sorgte dafür.

Page 29: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

37

Aktuelle Technologien der Webentwicklung 1.1

Mit der 1996 erschienenen dritten Version des Internet Explorers unterstützte auch MicrosoftJavaScript. Allerdings bezeichnet Microsoft die Sprache als JScript. Die Funktionen entspre-chen jedoch weitestgehend dem JavaScript des Navigators.

JavaScript bietet die Möglichkeit, die Interaktion mit dem Benutzer viel reichhaltiger zugestalten. In einer HTML-Seite ohne JavaScript muss jede Benutzeraktion durch einen Post-back ausgeführt werden. Das bedeutet, die vom Benutzer eingegebenen Daten werden zumServer gesendet, dieser behandelt die Daten und sendet dem Benutzer eine Antwort(Response).

Mit JavaScript ist es möglich, die Daten bereits auf dem Client zu validieren, ohne einen Post-back auszuführen. Auch Berechnungen von bestimmten Feldern lassen sich direkt auf demClient durchführen, wodurch die Anwendung für den Benutzer weitaus schneller ist als eineklassische Anwendung mit reichlich Postbacks.

In heutigen Webanwendungen erfolgt die Validierung häufig mit JavaScript. Auch Ajax-Anwendungen basieren auf JavaScript. Doch dazu gleich mehr.

1.1.3 Cascading Style Sheets (CSS)

In klassischem HTML werden Inhalt und Aussehen einer Seite stets vermischt. Mit den Mitteder 90er eingeführten Cascading Style Sheets (CSS) bietet sich eine Möglichkeit, Aussehen undInhalt komplett voneinander zu trennen. Dabei werden die Regeln für das Aussehen meist ineine separate Datei mit der Endung .css ausgelagert. CSS bietet viele Vorteile und ist heute sehrverbreitet. Wer heute eine Webseite ohne CSS baut, ist sich wohl der Vorteile nicht bewusst.Mit CSS können sich Designer speziell auf das Aussehen konzentrieren, während Entwicklerdie Logik implementieren. Gibt es keine Aufteilung, ändert CSS dennoch die Arbeitsweiseeines Entwicklers: Er kann zuerst die Logik der Webseite implementieren und das Aussehenspäter festlegen. Ist das Aussehen nicht mehr zufriedenstellend, muss nur die CSS-Datei geän-dert werden, die eigentliche HTML-Seite bleibt unberührt.

Ein CSS lässt sich für beliebig viele Seiten verwenden. Folglich erstellen Unternehmen ihreeigenen CSS-Dateien mit ihrem Corporate Design (CD). In CSS lassen sich Regeln definieren,die über mehrere Stylesheets hinweg vererbt werden. Insbesondere diese Tatsache, dass dieStyles vererbbar sind, machen Cascading Style Sheets zu einer genialen Technologie in dermodernen Webentwicklung.

Hinweis

In diesem Buch wird durchgehend von »JavaScript« gesprochen, auch wenn es in der Microsoft-Terminologie »JScript« oder im Standard als »ECMAScript« bezeichnet wird.

Page 30: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

38

Einführung in Silverlight1

1.1.4 DHTML

Zwischen JavaScript und CSS sind Interaktionen möglich. Mit JavaScript lassen sich beliebigeElemente referenzieren und ändern, egal ob die Elemente zum Inhalt der HTML-Seite oderzum CSS gehören. Da JavaScript eine Programmiersprache ist, lassen sich bestimmte Eigen-schaften auch mit einem Animationseffekt verändern. Beispielsweise kann mit CSS die Trans-parenz eines Elements gesetzt werden, die sogenannte Opacity. In Kombination mit Java-Script lassen sich Elemente dynamisch ein- und ausblenden. Jedes Element und jedeEigenschaft kann mit JavaScript geändert werden, wodurch sich natürlich enorme Möglich-keiten bieten. JavaScript kann mit CSS mehr als nur den Inhalt während des Ladens dyna-misch zu generieren, Formulare auszuwerten oder Bilder auszutauschen. Die Kombination ausHTML, JavaScript und CSS heißt Dynamic HTML (DHTML). Der Begriff DHTML bezeichnetalso keine eigenständige Technologie, sondern nur einen Technologieverbund.

1.1.5 Ajax

Über DHTML hinaus bietet JavaScript eine Verbesserung der Kommunikation zwischen demClient und dem Server. Dazu besitzt JavaScript das XMLHttpRequest-Objekt, das es JavaScriptermöglicht, eine Anfrage an den Webserver zu senden, ohne die komplette Webseite aktuali-sieren zu müssen. Anstatt eines gewöhnlichen Postbacks kann die Kommunikation im Hinter-grund asynchron stattfinden, ohne dass der Benutzer etwas davon merkt. In JavaScript wirdauch die Antwort vom Server erhalten. Es lassen sich so anstelle der kompletten Webseiteauch einzelne Teile aktualisieren, was für den Benutzer viel angenehmer ist. Hat die Webseitebeispielsweise ein Menü, das beim Klicken weiterhin sichtbar bleibt, da nur der zu änderndeTeil der Seite neu geladen wird, ist dies natürlich viel angenehmer, als wenn das Menü beijedem Klick verschwindet, der Browser kurz weiß wird und die komplette Seite neu geladenund angezeigt wird.

Hinweis

Trotz seiner verschiedenen Möglichkeiten ist DHTML nicht zufriedenstellend. Beispielsweise wirddie Transparenz nicht von allen Browsern unterstützt, wodurch Entwickler schon wieder Browser-unterschiede zu bewältigen haben. Des Weiteren ist das Bewegen von Elementen mit einer pro-grammierten Animation alles andere als flüssig. Auch das Rotieren von Elementen, wie beispiels-weise einem HTML-Button, ist nur mit dem Übereinanderlegen von Bildern möglich, was einenRotationseffekt ergibt. Die Punkte lassen sich noch weiter fortführen. Vorweg kann man sagen,dass in Silverlight alle Möglichkeiten, die in DHTML schwierig oder nicht schön genug umgesetztwerden können, vergleichsweise relativ einfach zu implementieren sind.

Hinweis

Einige Entwickler bevorzugen für solche Seiten mit einem Menü und darunterstehendem Inhaltauch IFrames. Beim Klick auf den Menüpunkt wird lediglich der Inhalt des IFrames neu geladen,und aus Benutzersicht tritt derselbe Effekt wie bei Ajax auf.

Page 31: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

39

Aktuelle Technologien der Webentwicklung 1.1

Da JavaScript im Hintergrund mit Hilfe des XMLHttpRequest-Objekts XML asynchron an denServer sendet, hat sich für diese Technologie der Name Asynchronous JavaScript and XML(Ajax) herauskristallisiert.

Ajax ist ziemlich komplex zu programmieren. Mittlerweile gibt es jedoch viele Web-Frame-works, die Ajax abstrahieren und somit eine relativ einfache Umsetzung einer Ajax-basiertenWebseite erlauben. Beispielsweise bietet ASP.NET diverse Controls, mit denen sich Ajax-Funktionalität auch ohne JavaScript-Kenntnisse implementieren lässt.

Da Ajax deutliche Verbesserungen der Benutzerführung ermöglichte, tauchte im Jahr 2005mit dem Ajax-Boom auch der Begriff Web 2.0 auf. Obwohl sich mit Ajax reichlich neue Mög-lichkeiten öffnen, hat die Technologie auch Nachteile. Sie ist sehr komplex und kann beiunterschiedlichem JavaScript-Handling in verschiedenen Browsern auch zu Fehlern führen.Die Standardgremien arbeiten natürlich auf Hochtouren, damit jeder Browser dieselbe Funk-tionalität bezüglich dem XMLHttpRequest-Objekt besitzt, dennoch ist Ajax weiterhin einekomplexe Technologie. Browser-Plugins können das asynchrone Nachladen von Daten einfa-cher behandeln.

1.1.6 Browser-Plugins

Die Einschränkungen von DHTML – also dass Animationen nicht flüssig laufen, Objekte sichnicht rotieren lassen oder Drag & Drop nur mit vielen Tricks möglich ist – führten dazu, dassDritthersteller Plugins für Browser schrieben. Das wichtigste Ziel eines Plugins ist es, die Ein-schränkungen von HTML & Co. zu umgehen und dem Entwickler eine einfache Möglichkeitzu geben, dass seine erstellte Seite in allen Browsern gleich aussieht. Mit einem Plugin soll dieQualität von Webseiten erhöht werden. Die wichtigsten Plugins sind Java Applets, ActiveX,Adobe Flash und natürlich Silverlight. Dieser Abschnitt zeigt einen Überblick dieser Plugins,damit Sie Silverlight gut in die Webentwicklung einordnen können.

Die Java Applets

Um 1997 waren die Java Applets sehr modern, und jeder Webentwickler beschäftigte sich mitihnen. Heute ist die Zahl an Java Applets im Internet sehr stark zurückgegangen, kaum eineSeite verwendet sie noch. Der wohl ausschlaggebende Grund ist, dass das Initialisieren einerWebseite mit dem Java Applet lange dauert, denn hier muss die Java-Laufzeitumgebunggestartet werden. Heute gibt es mit Adobe Flash und Silverlight wesentlich bessere Plugins.Doch zur damaligen Zeit waren eben Applets modern.

Ein großer Vorteil, den die Java Applets boten, war natürlich die Tatsache, dass man Java pro-grammieren konnte. Java war damals bereits eine umfassende objektorientierte Sprache, vonder auch viele Ideen in C# eingeflossen sind. Mit Java und den damit zur Verfügung stehen-den Klassen ist eine Kommunikation mit dem Server möglich, wie sie mit klassischen Mittelnnicht zu bewerkstelligen ist. Der Server kann über ein sogenanntes Servlet direkt mit dem

Page 32: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

40

Einführung in Silverlight1

Client kommunizieren. Dies wurde von vielen Firmen als enorme Sicherheitslücke angesehen.Somit starben die Applets langsam aus.

Obwohl Java Applets dem Entwickler den Vorteil bieten, mit Java programmieren zu können,haben sie auch einige Nachteile. Applets können beispielsweise nur mit ihren Servlets kom-munizieren; sie benötigen lokal die Laufzeitumgebung für Java, die sogenannte Java VirtualMachine (JVM); Applets sind wesentlich langsamer als Flash und Silverlight; und die Darstel-lung von Applets unterscheidet sich von Browser zu Browser.

ActiveX

ActiveX ist eine von Microsoft eingeführte, auf der Common-Object-Model-Architektur(COM) basierende Technologie. Mit der COM-Technologie lassen sich ActiveX-Controls erstel-len, die sowohl für die lokale Ausführung auf dem Client als auch für die Ausführung in einerWebanwendung einsetzbar sind. Somit besitzen COM-erfahrene Entwickler die Möglichkeit,mit klassischem und sehr schnellem C++ Controls zu entwickeln, die im Webbrowser laufen.Aus diesen Controls ist auch der Zugriff auf JavaScript möglich.

Der Internet Explorer hat die für ActiveX notwendigen Ressourcen bereits integriert; einPlugin muss somit zum Ausführen von ActiveX-Controls nicht heruntergeladen werden.Andere Browser, wie Firefox, benötigen dagegen ein Plugin, damit sie ActiveX-Inhalte ausfüh-ren können.

Aus heutiger Sicht hat ActiveX den Nachteil, dass es mit COM eine sehr alte Technologie alsBasis hat und von anderen Browsern, wie Firefox, nicht standardmäßig unterstützt wird.

Die Tage von Java Applets und ActiveX in Webanwendungen sind somit wohl gezählt.Obwohl Sie Applets und ActiveX immer noch verwenden können, kann man heute generellvon drei starken, modernen Plugins sprechen: JavaFX, Adobe Flash und Silverlight.

JavaFX

JavaFX ist eine Plugin-Technologie, die auf der Java-Laufzeitumgebung aufbaut. JavaFX 1.0wurde am 4. Dezember 2008 eingeführt.

JavaFX unterstützt die Arbeitsweise zwischen Entwicklern und Designern mit verschiedenenWerkzeugen und der Scriptsprache JavaFX Script. Als Entwickler starten Sie mit JavaFX,indem Sie das Software Development Kit (SDK) von www.javafx.com herunterladen. Designerfinden dort die sogenannte JavaFX Production Suite, um die Anwendungen zu gestalten.

Hinweis

In Java Applets wird tatsächlich Java programmiert. An dieser Stelle ist vielleicht nochmals erwäh-nenswert, dass Java und JavaScript, trotz des gemeinsamen Wortes »Java« in ihren Namen, einenkomplett anderen Ursprung haben. Es sind zwei verschiedene Programmiersprachen.

Page 33: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

41

Silverlight – ein Überblick 1.2

Obwohl JavaFX neu ist, redet die Webwelt derzeit fast nur von Flash und Silverlight. JavaFXbesitzt wie auch Flash den Nachteil, dass eine proprietäre Skriptsprache eingesetzt wird.

Adobe Flash

Mit dem Durchbruch von Adobe Flash sind Java Applets und klassische ActiveX-Controls aufWebseiten fast vollkommen verschwunden. Flash ist heute das verbreitetetste Plugin. Eswurde ursprünglich für Grafikdesigner erstellt und bietet dadurch natürlich reichlich grafischeEffekte. Obwohl es auf Webseiten oft nur für animierte Werbebanner eingesetzt wird, gibt esauch einige Webseiten, die komplett mit Flash umgesetzt sind.

Ursprünglich wurde Flash von der Firma Macromedia entwickelt. Macromedia wurde vonAdobe aufgekauft, und das Produkt nennt sich seitdem Adobe Flash.

Flash ist sehr mächtig, und es lassen sich damit richtige Geschäftsanwendungen entwickeln.Allerdings ist das Entwickeln mit der proprietären Sprache ActionScript einer der Nachteilevon Flash. Obwohl Flash für Designer ein grandioses Tool ist, müssen Entwickler erst die neueSprache erlernen, was einen Einstieg nicht ganz so einfach macht.

1.2 Silverlight – ein Überblick

Plugin-Technologien sind schon länger gebräuchlich. Silverlight ist somit aus Benutzersichtnichts grundsätzlich Neues – aus der Entwicklersicht dagegen schon. Das Interessante an Sil-verlight ist eben nicht, was es macht, sondern wie es gemacht wird. Silverlight ist eine Unter-menge der Windows Presentation Foundation (WPF) und des .NET Frameworks. Mit der WPFund dem .NET Framework sind viele Designer und Entwickler bereits vertraut. Nimmt manaus dem .NET Framework die nützlichsten Komponenten und kombiniert diese mit Multi-media-Unterstützung, WPF, Controls, dynamischen Sprachen und einer »Mini«-CLR (Com-mon Language Runtime), dann hat man vereinfacht gesehen Silverlight.

Silverlight ähnelt Flash. Um genauer zu sein, ist Silverlight ein hartes Konkurrenzprodukt zuFlash. Ein großer Vorteil von Silverlight ist, dass Entwickler aus der Windows-Welt ihreKenntnisse im Zusammenhang mit dem .NET Framework auch in Silverlight anwenden

Hinweis

Die hier gezeigten Technologien sind allesamt clientseitige Technologien. In der Geschichte derWebentwicklung haben sich auch zahlreiche serverseitige Technologien etabliert, wie beispiels-weise Java Server Pages (JSP), PHP Hypertext Preprocessor (PHP) oder ASP.NET. An den Client sen-den Sie immer HTML-Seiten mit JavaScript und CSS. In einer an den Client gesendeten HTML-Seitekann sich dabei ein object-Tag befinden, das ein entsprechendes Plugin lädt, wie eben AdobeFlash oder Silverlight.

Page 34: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

42

Einführung in Silverlight1

können. Zudem lassen sich C# als Programmiersprache und Visual Studio als Entwicklungs-umgebung nutzen, was einem .NET-Entwickler den Einstieg in Silverlight extrem erleichtert.

In diesem Abschnitt werfen wir einen Blick auf Rich Internet Applications (RIAs), die Stärkenund Schwächen von Silverlight, die Architektur von Silverlight und auch auf den Ladevorgangeiner Silverlight-Anwendung. Zum Abschluss erhalten Sie nach einem Blick auf das Renderingeine Übersicht der in Silverlight 4.0 eingeführten Neuerungen.

1.2.1 Rich Internet Applications & Silverlight

Webanwendungen im klassischen Sinne enthalten HTML, das vom Browser gezeichnet wirdund somit das User Interface für den Benutzer darstellt. Webanwendungen laufen gewöhnlichin einer Client-Server-Umgebung ab. Das heißt, ein HTML-Dokument wird auf dem Client alsAntwort einer Serveranfrage dargestellt. Muss eine Webanwendung die aktuell im Browserdargestellte Seite aktualisieren, schickt sie Daten zurück an den Server (Postback), und diesersendet als Antwort die neu generierte Seite zurück an den Client.

Als Rich Internet Applications (RIA) werden Webanwendungen bezeichnet, die gegenüberden klassischen Webanwendungen mehr Merkmale und Funktionen von altbewährten Desk-topanwendungen besitzen. Rich Internet Applications laufen zwar im Browser ab, bieten demBenutzer jedoch viele Möglichkeiten, die er aus klassischen Windows-Anwendungen kennt,wie beispielsweise Drag & Drop und Animationen. RIAs ermöglichen diesen Mehrwert, daprogrammiertechnisch viel Arbeit bereits auf dem Client erledigt wird, wohingegen bei einertraditionellen Webanwendung alles auf dem Server abgearbeitet werden muss. Die Kommu-nikation mit dem Server beschränkt sich bei RIAs auf das Senden und Empfangen von Daten.Die Oberfläche wird komplett auf dem Client erzeugt und kann dort auch auf Benutzereinga-ben reagieren.

Obwohl sich RIAs auch mit den Technologien JavaScript, Ajax, HTML und CSS entwickeln las-sen, ist es für Entwickler mit diesen Technologien sehr schwierig. Unterschiedliche Plattfor-men und verschiedene Browser machen das Ganze schier unmöglich. Die Browser zeichnendie Seiten unterschiedlich und behandeln sogar JavaScript auf andere Weise. Haben Sie esgeschafft, Ihre Anwendung im Internet Explorer fertigzustellen, könnten Sie im Firefox eineböse Überraschung erleben. Zum Entwickeln einer RIA ist somit aufgrund der Probleme mitklassischen Webseiten meist eine Plugin-Technologie notwendig, wie beispielsweise Silver-light oder Adobe Flash.

Mit Silverlight haben Sie eine Plugin-Technologie gewählt, die Ihnen auf relativ einfacheWeise das Erstellen von RIAs ermöglicht. So kann in Silverlight viel Logik bereits auf derClient-Seite erledigt werden, und lediglich zum Datenaustausch wird asynchron im Hinter-grund mit dem Server kommuniziert. Sie können lokal validieren, Elemente animieren, dru-cken, lokale Dateien öffnen und so weiter.

Page 35: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

43

Silverlight – ein Überblick 1.2

Mittlerweile gibt es zahlreiche Beispiele im Internet, die bereits Silverlight einsetzen. Meinepersönliche Lieblingsseite wurde bereits 2008 vom Hard Rock Café vorgestellt und ist unterdem Link http://memorabilia.hardrock.com zu finden. Die Seite verwendet die in Silverlightintegrierte Deep-Zoom-Funktionalität, um diverse Bilder von Souvenirs auszustellen, die inden Hard Rock Cafés auf der ganzen Welt verteilt stehen. Das Interessante an der Anwendungist, dass in die Bilder hineingezoomt werden kann, bis jedes Detail sichtbar ist.

Abbildung 1.1 zeigt die »Hard Rock Memorabilia«-Seite, nachdem nach den AC/DC-Souvenirsgesucht wurde.

In die in Abbildung 1.1 dargestellten Souvenirs kann via Mausklick hineingezoomt werden.Dabei werden zum ausgewählten Bild noch Informationen angezeigt. In Abbildung 1.2 wurdedie legendäre Gibson-SG-Gitarre von AC/DC-Gitarrist Angus Young ausgewählt.

Hinweis

Die Deep-Zoom-Funktionalität schauen wir uns in Kapitel 17, »Multimedia«, an.

Abbildung 1.1 Die »Hard Rock Memorabilia«-Seite mit den AC/DC-Souvenirs

Page 36: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

44

Einführung in Silverlight1

Sie finden zig weitere Beispielanwendungen im Web. Am besten werfen Sie einen Blick aufdie Seite www.silverlight.net/showcase, die in Abbildung 1.3 zu sehen ist. Darin befanden sichwährend des Schreibens dieses Buchs 852 Links zu online verfügbaren Silverlight-Anwendun-gen. Die in Abbildung 1.3 zu sehende Übersicht mit diesen Links ist übrigens auch mit Silver-light erstellt.

Falls Sie den Eindruck erhalten haben, dass Silverlight nur für grafisch hochwertige Anwen-dungen mit Bildern und Videos geeignet ist, liegen Sie falsch. Auch datenintensive Business-Applikationen lassen sich mit Silverlight entwickeln, so etwa die in diesem Buch durchgängiggenutzte Beispielanwendung FriendStorageOnline. In FriendStorageOnline lassen sich Listenmit Freunden anlegen, die im Hintergrund via WCF-RIA-Services in einer SQL-Datenbankgespeichert werden. Bei einer geöffneten Liste werden rechts die in der Liste enthaltenenFreunde angezeigt und links der aktuell selektierte Freund. In Abbildung 1.4 sehen Sie diegeöffnete Liste GuteFreunde.

Abbildung 1.2 In die einzelnen Souvenirs kann hineingezoomt werden.

Page 37: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

45

Silverlight – ein Überblick 1.2

Abbildung 1.3 Showcase-Anwendungen unter Silverlight.net

Abbildung 1.4 Die FriendStorageOnline-Anwendung

Page 38: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

46

Einführung in Silverlight1

Während natürlich Silverlight als Plugin zahlreiche Vorteile für RIAs bietet, gibt es auch einpaar Nachteile; beispielsweise benötigt der Benutzer für Silverlight-Anwendungen das einpaar Megabyte große Plugin. Die Stärken und Schwächen von Silverlight schauen wir uns imnächsten Abschnitt näher an.

1.2.2 Stärken und Schwächen von Silverlight

Silverlight als Browser-Plugin bietet zahlreiche Stärken beim Entwickeln einer Webanwen-dung, aber natürlich auch einige Schwächen. Dieser Abschnitt soll Ihnen einen groben Über-blick geben. Beginnen wir mit den wichtigsten Stärken von Silverlight:

� .NET-basierte Programmiersprache – Ihre Silverlight-Anwendung entwickeln Sie in C#oder VB.NET. Als erfahrener .NET-Entwickler können Sie somit gleich loslegen und Ihre.NET-Kenntnisse auch in der Silverlight-Welt anwenden. Da in Silverlight auch die Dyna-mic Language Runtime (DLR) integriert ist, können Sie in Ihren Anwendungen sogar IronPython nutzen.

� .NET – Silverlight enthält ein »kleines« .NET Framework. In vielen Fällen lässt sich Code,der für eine .NET-Applikation geschrieben wurde, auch in Silverlight verwenden. IhreKenntnisse aus der .NET-Welt lassen sich direkt in Silverlight anwenden. Silverlight enthältwie auch das richtige .NET Framework eine Common Language Runtime (CLR) mit Gar-bage Collector und allem, was dazugehört.

� Professionelle Entwicklungsumgebung – Die Umgebungen zum Entwickeln von Silver-light-Anwendungen sind die Ihnen vertrauten, wenn Sie ein .NET-Entwickler sind und mitVisual Studio schon gearbeitet haben. Während Sie in Visual Studio programmieren, ver-wenden Sie Expression Blend zum Gestalten Ihrer Silverlight-Anwendungen.

� Client benötigt nur das Plugin. – Auf dem Client wird zum Ausführen Ihrer Silverlight-Anwendung keine .NET-Laufzeitumgebung benötigt, sondern nur das Silverlight-Plugin.Der Benutzer wird somit nicht mit einem Windows-Installer und einem großen Downloadkonfrontiert, sondern muss nur das ca. 5 MB große Plugin herunterladen, was direkt überden Browser geschieht. Vergleicht man diesen Punkt allerdings mit klassischen Weban-wendungen, ist er als Nachteil anzusehen, denn für klassische Webanwendungen mussnicht explizit ein Plugin heruntergeladen werden.

� Eine konsistente Umgebung für alle Browser – Mit dem Silverlight-Plugin können Sie alsEntwickler eine Webanwendung erstellen, ohne sich dabei mit den Unterschieden mehre-rer Browser in verschiedenen Versionen ärgern zu müssen. Wer hat nicht bereits Websei-ten gebaut, die im Internet Explorer anders als im Firefox gezeichnet wurden? Danebenbietet Silverlight auch Unterstützung für grafische Effekte, wie Animationen oder Video,die sich mit klassischem HTML und JavaScript nicht realisieren ließen.

� Untermenge der Windows Presentation Foundation – Zum Entwickeln der Oberflächestehen Klassen der Windows Presentation Foundation (WPF) sowie die XML-basierte

Page 39: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

47

Silverlight – ein Überblick 1.2

Beschreibungssprache XAML zur Verfügung. Somit sind in Silverlight komplexe Layouts,Transformationen oder Animationen mit den aus der Windows-Entwicklung bewährtenKonzepten und Controls möglich.

� Out-of-Browser-Unterstützung – Seit der dritten Version von Silverlight können Silver-light-Anwendungen auch außerhalb des Browsers »stand-alone« gestartet werden. Damitkommt Silverlight in den Bereich der Desktopanwendungen und ist somit nicht nur zumEntwickeln von RIAs interessant. Seit Silverlight 4.0 können diese Out-of-Browser-Anwen-dungen auch im »Full-Trust«-Modus erstellt werden, wodurch Sie Zugriff auf das lokale Da-teisystem des Benutzers haben.

� Professionelle Ausdrucke – Mit Silverlight 4.0 wurde die Druckunterstützung eingeführt.Bequem lassen sich im Client Ausdrucke erstellen. Dabei haben Sie die Möglichkeit, jedesbeliebige Control an die Printerqueue zu senden.

Die Liste der Stärken ließe sich noch weiter fortführen. Beispielsweise sind die Unterstützungfür den Isolated Storage und die Unterstützung für Drag & Drop oder die vielen Controls vonDrittherstellern erwähnenswert.

Insbesondere in Silverlight 4.0 kamen neben der Druck-Unterstützung einige Neuerungenhinzu: implizite Styles, RichText-Unterstützung oder einfach die Möglichkeit, in einem DataBinding ein String-Format anzugeben. Auch auf die Webcam und das Mikrofon auf demClient kann zugegriffen werden. Diese Neuerungen betrachten wir in Abschnitt 1.2.6 näher.

Neben den zahlreichen Stärken von Silverlight wollen wir Ihnen natürlich auch ein paarSchwächen an dieser Stelle nicht vorenthalten:

� Silverlight und WPF sind nicht ganz gleich. – Dass Silverlight, wie eben behauptet, eineUntermenge der WPF ist, ist nur fast richtig. Einige Klassen fehlen in Silverlight, anderesind in Silverlight anders implementiert als in der WPF. Umgekehrt gibt es auch einige Fea-tures in Silverlight, die in der WPF nicht enthalten sind. Dies macht natürlich eine einheit-liche Codebasis für WPF und Silverlight nicht ohne weiteres möglich.

� Silverlight ist nicht 100 % Cross-Browser- und Cross-Plattform-fähig. – Obwohl Silver-light ein Browser-Plugin ist, läuft Silverlight 4.0 bisher nur auf Windows und Mac OS inden Browsern Internet Explorer ab Version 6, Firefox ab Version 2, Safari ab Version 3 undGoogle Chrome. Der Browser Opera wird (noch) nicht unterstützt. Unter Linux wurde zumZeitpunkt der Fertigstellung dieses Buches nur Version 2 von Silverlight unterstützt.Microsoft beteiligt sich zwar am sogenannten »Moonlight«-Projekt, um Silverlight auch aufder Linux-Plattform voranzutreiben, aber es sieht so aus, als ob die Linux-Version von Sil-verlight immer den Windows- und Mac-OS-Versionen hinterherhinken wird.

Page 40: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

48

Einführung in Silverlight1

1.2.3 Die Silverlight-Architektur

Die Architektur des Silverlight-Plugins basiert grob genommen auf drei Bausteinen, wie Abbil-dung 1.5 zeigt. Diese Bausteine erkläre ich Ihnen in diesem Abschnitt kurz, bevor ich auf denLadevorgang des Silverlight-Plugins eingehe.

Baustein 1 – PresentationCore (WPF)

Die PresentationCore-Komponente bildet den ersten Baustein des Plugins. Mit Presenta-tionCore sind die Klassen der Windows Presentation Foundation gemeint. Natürlich kann mandarüber streiten, ob diese zum Baustein ».NET für Silverlight« hinzugezählt werden odernicht. In Abbildung 1.5 wurde die WPF bewusst nicht zu diesem Baustein hinzugezählt, son-dern eben separat dargestellt, um das Gewicht der WPF im Silverlight-Plugin zu verdeut-lichen.

Der PresentationCore-Baustein umfasst einige Features aus der WPF. Dazu gehören unteranderem Controls, Layout, Data Binding, Audio und Video, Styles & Templates, Klassen fürMaus- und Tastaturevents und natürlich auch die XML-basierte Beschreibungssprache XAMLzum Definieren der Benutzeroberfläche.

Baustein 2 – .NET für Silverlight

Der zweite Baustein der in Abbildung 1.5 dargestellten Silverlight-Komponenten ist das .NETFramework für Silverlight. Dies ist ein abgespecktes .NET Framework, also eine Untermengedes »richtigen« .NET Frameworks. Zum .NET Framework für Silverlight gehört die als Com-mon Language Runtime (CLR) bezeichnete Laufzeitumgebung. Diese ist in Silverlight etwas

Hinweis

Moonlight ist eine Open-Source-Implementierung von Silverlight für Linux. An dem Projekt betei-ligen sich unter anderem Microsoft und Novell. Mehr Informationen und den Download vonMoonlight finden Sie unter http://www.mono-project.com/Moonlight.

Abbildung 1.5 Die drei Bausteine von Silverlight

Silverlight-Plugin

PresentationCore (WPF)

.NET für Silverlight

Browser Host

Page 41: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

49

Silverlight – ein Überblick 1.2

abgespeckt, aber unterstützt auch für Silverlight das Memory Management mit einem Gar-bage Collector, besitzt Logik für Exception Handling und ein Common Type System für dieTypensicherheit. Zum .NET Framework für Silverlight zählt neben der CLR eine Sammlungvon Basisklassen für die Ein- und Ausgabe, für Reflection, Collections, Generics usw. Ebenfallsenthält das .NET Framework für Silverlight Klassen der Windows Communication Foundation(WCF) zum Kommunizieren mit WCF Services. Sie haben unter anderem die Möglichkeit, mitREST, mit SOAP, über normales XML (wird auch als Plain old XML [= POX] bezeichnet) oderüber RSS zu kommunizieren. Darüber hinaus wird in Silverlight auch die Language IntegratedQuery (LINQ) unterstützt. Es gibt Klassen zum Serialisieren von Daten und zum Ein- und Aus-lesen von XML. Sie finden alles, was Sie zum Entwickeln von RIAs benötigen. .NET für Silver-light enthält wie eben bereits erwähnt sogar eine Dynamic Language Runtime (DLR) zum Aus-führen von dynamischen Sprachen wie Iron Python.

Baustein 3 – Browser Host

Der dritte in Abbildung 1.5 gezeigte Baustein ist der Browser Host. Mit Browser Host ist dasPlugin als solches gemeint, das im Browser läuft und Ihre Anwendung »hostet«. Zum BrowserHost gehört auch die Installations- und Update-Engine, die für das Installieren und Aktualisie-ren verantwortlich ist. Zum Browser Host zählen aber auch Klassen, die Ihnen den Zugriff aufden HTML-DOM und den Browser selbst ermöglichen. Damit können Sie beispielsweise ausSilverlight heraus HTML-Elemente ansteuern oder den Browser auffordern, in die Vollbildan-zeige zu wechseln.

1.2.4 Ladevorgang einer Silverlight-Anwendung

Nachdem Sie die drei Bausteine des Silverlight-Plugins im vorherigen Abschnitt grob gesehenhaben, lernen Sie hier den Ladevorgang einer Silverlight-Anwendung kennen. Prinzipiell wirdzunächst eine Webseite geladen, die ein sogenanntes object-Tag enthält. Dieses object-Tag

Hinweis

Wird in diesem Buch von ».NET-Klassen« gesprochen, sind damit die Klassen aus dem .NET Frame-work für Silverlight gemeint. Diese Klassen sind meist identisch mit jenen aus dem richtigen .NETFramework, es gibt aber auch Ausnahmen. Manche Klassen sind in Silverlight anders implementiertund besitzen weniger oder andere Methoden.

Hinweis

Ziel dieses Buchs ist es nicht, sämtliche Aspekte des .NET-Frameworks für Silverlight und seinerKomponenten zu beschreiben. Die Komponenten wie Generics oder LINQ werden zwar verwen-det, aber es wird mehr auf den UI-spezifischen Teil mit den WPF-Klassen in Silverlight, auf dieKommunikation mit Services und auf den Browser Host eingegangen. Voraussetzung für das Buchist, wie ich es schon in den Hinweisen zum Buch beschrieben habe, dass Sie schon .NET-Know-howbesitzen. Ist dies der Fall, werden Sie sich im .NET-Framework für Silverlight schnell zurechtfinden.

Page 42: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

50

Einführung in Silverlight1

lädt das Silverlight-Plugin. Ist das Plugin initialisiert, wird die Silverlight-Applikation vom Ser-ver heruntergeladen und im Plugin dargestellt. Dies geschieht im in Abbildung 1.6 als »Initia-lisierender Ladevorgang« bezeichneten Schritt. Die Silverlight-Anwendung läuft dann in einerSandbox im Browser auf dem Client ab. Aus dem Silverlight-Plugin bzw. aus der Silverlight-Anwendung finden asynchrone Serviceaufrufe statt, um weitere Daten vom Server zu ladenoder Daten an den Server zu senden. Diese Aufrufe sind immer asynchron, damit der Brow-ser-Prozess nicht blockiert wird.

1.2.5 Die Silverlight-Rendering-Pipeline

Ein interessanter Teil, den sich Silverlight von der WPF geborgt hat, ist das Rendering (= Zeich-nen auf den Bildschirm). Wie auch in der WPF werden in Silverlight alle visuellen Elementezu einem großen Bild zusammengefügt, und anschließend wird dieses Bild als Ganzes gezeich-net. Dies wird als Composition bezeichnet.

Alle visuellen Elemente einer Silverlight-Anwendung stehen über eine Hierarchie in Verbin-dung. Diese Hierarchie wird als Visual Tree bezeichnet. An der Wurzel dieses Visual Treessteht das oberste Element Ihrer Silverlight-Anwendung. Dieses Wurzelelement kann beispiels-

Abbildung 1.6 Ladevorgang und Leben einer Silverlight-Anwendung

Client

Browser

Silverlight-Plugin

PresentationCore (WPF)

.NET für Silverlight

Browser Host

Server

Webservices

Initialisierender Ladevorgang

Asynchrone Serviceaufrufe

Web-Server

Hinweis

Surfen Sie zu einer Webseite mit Silverlight-Inhalt und haben Sie das Silverlight-Plugin noch nichtinstalliert, erhalten Sie einen Hinweis mit einem Installationslink. Direkt aus dem Browser herauslässt sich das Silverlight-Plugin installieren. In Kapitel 2, »Das Programmiermodell«, erfahren Sie imZusammenhang mit dem object-Tag, wie Sie den für diese Installationsroutine angezeigten Hin-weis anpassen. Der Hinweis ist dabei nichts anderes als eine einfache Bilddatei mit etwas Text.

Page 43: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

51

Silverlight – ein Überblick 1.2

weise ein Layout-Panel mit mehreren Textboxen enthalten, die sich dann auch alle in diesemVisual Tree befinden. Der Visual Tree enthält auch alle primitiven visuellen Elemente. Bei-spielsweise besteht eine Textbox wiederum aus einfacheren Elementen, wie einem Rectangleoder einer Border. Auch diese Elemente sind im Visual Tree enthalten.

Beim Rendering wird aus dem Visual Tree ein großes, ganzes Bild erzeugt und dargestellt. DerVorteil ist, dass durch das Erzeugen des ganzen Bildes einzelne visuelle Elemente andere über-lappen können und somit beispielsweise ein Element halbtransparent über ein anderesgezeichnet werden kann.

Jetzt stellt sich nur noch die Frage, wann das Rendering überhaupt stattfindet. Schauen wiruns dies genauer an. Der Rendering-Prozess ist Teil einer Schleife, die als Drawing Loopbezeichnet wird. Die Drawing Loop ist in Silverlight das, was in Windows-Anwendungen diealtbekannte Message Loop, oder zu Deutsch »Nachrichtenschleife«, ist.

Die Drawing Loop besteht vereinfacht gesagt aus vier Schritten, wobei einer dieser Schritteder Rendering-Prozess ist. Abbildung 1.7 verdeutlicht die vier Schritte. Wird die DrawingLoop gestartet, werden zuerst die Eventhandler ausgeführt. Anschließend werden die Ände-rungen bezüglich der Benutzeroberfläche betrachtet, dann wird das Layout durchgeführt undschließlich das Rendering.

Die Drawing Loop läuft mit einer bestimmten Wiederholungsrate ab, die sich Frameratenennt (= Bildrate). Die Wiederholungsrate wird dabei in der Einheit »Anzahl an Bildern pro

Hinweis

Wie Sie den Visual Tree im Code ablaufen können, erfahren Sie am Ende von Kapitel 3, »XAML«.

Abbildung 1.7 Die Drawing Loop

Silverlight-Plugin

Drawing Loop (Framerate)

Rendering

Eventhandler

Irgendwelche Änderungen ?

Layout

Page 44: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

52

Einführung in Silverlight1

Sekunde« angegeben (Frames per Second = fps). Klickt der Benutzer beispielsweise einen But-ton, wird im nächsten Durchgang der Drawing Loop der entsprechende Eventhandler ausge-führt, eventuelle Layout-Änderungen erfolgen, und die Anwendung wird neu gezeichnet.

1.2.6 Neuerungen in Silverlight 4

Im Frühling 2010 wurde die finale Silverlight 4.0-Version veröffentlicht. Tabelle 1.1 zeigt diewichtigsten Neuerungen von Silverlight 4.0 im Überblick. Dies ist insbesondere interessant,wenn Sie bereits mit älteren Silverlight-Versionen gearbeitet haben.

Hinweis

Im Layout-Schritt des Drawing Loops werden die Größe und die Position von Elementen berech-net. Dieser Layout-Schritt besteht aus den zwei Stufen Measure und Arrange. Diese zwei Stufenwerden in Kapitel 5, »Layout«, genauer erklärt.

Eigenschaft Beschreibung

Druckunterstützung Mit den Klassen aus dem Namespace System.Windows.Printing ist es möglich, aus einer Silverlight-Anwendung jedes beliebige visuelle Element auszudrucken. Darüber hinaus lassen sich mehrseitige Ausdrucke auf ein-fache Art und Weise steuern. Mehr zur Druckunterstützung lesen Sie in Kapitel 18, »Drucken«.

Maus-Events Neue Events für den Maus-Rechtsklick und für das Maus-Wheel werden unterstützt. Dadurch sind beispielsweise Kontextmenüs möglich. Mehr Informationen dazu finden Sie in Kapitel 7, »Input Events«.

Data Binding Das Data Binding erhielt einige Neuerungen. Die wichtigste ist wohl, dass das Data Binding jetzt wie auch bei der WPF in der Klasse Dependency-Object implementiert ist. In Silverlight 3 war die Logik noch in der indirekten Subklasse FrameworkElement enthalten.

RichText Mit dem neuen Control RichTextBox ist in Silverlight jetzt die Eingabe von RichText möglich. Mehr darüber erfahren Sie in Kapitel 4, »Controls«.

Clipboard Mit der Klasse Clipboard lassen sich Texte in die Zwischenablage kopieren und von dort auch wieder auslesen. Näheres dazu in Kapitel 7, »Input Events«.

Webcam und Mikrofon Eine Silverlight-Anwendung kann auf das lokale Mikrofon und die Web-cam zugreifen und somit die Aufzeichnungen beispielsweise an einen Server senden. Darüber lesen Sie mehr in Kapitel 17, »Multimedia«.

Drag & Drop Daten lassen sich vom Betriebssystem in Ihre Silverlight-Anwendung »droppen«. Darauf geht Kapitel 7, »Input Events«, detaillierter ein.

implizite Styles Styles können implizit angewendet werden. Somit können Sie zentral für Ihre Anwendung einen Style für Buttons definieren, der beispielsweise die Hintergrundfarbe auf Schwarz setzt. Die Buttons müssen diesen Style nicht mehr explizit referenzieren, wie das bisher der Fall war. Damit beschäftigen wir uns in Kapitel 10, »Styles und Templates«.

Tabelle 1.1 Einige Neuerungen von Silverlight 4.0

Page 45: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

53

Silverlight-Konzepte 1.3

Bevor wir mit dem Programmieren loslegen, werfen wir im letzten Abschnitt dieses Kapitelseinen Blick auf ein paar grundlegende Silverlight-Konzepte.

1.3 Silverlight-Konzepte

Silverlight enthält zahlreiche Konzepte, die meisten stammen aus der WPF. Tabelle 1.2 zeigtdie Konzepte mit einer kurzen Beschreibung

Fully-trusted Out-of-Browser Out-of-Browser-Anwendungen können im Full-Trust-Modus ablaufen. Dadurch ist es möglich, auf lokale Dateien zuzugreifen oder sogar via COM-Interop Word oder Excel zu steuern. Mehr erfahren Sie in Kapitel 19, »Applikationen«.

Eigenschaft Beschreibung

Tabelle 1.1 Einige Neuerungen von Silverlight 4.0 (Forts.)

Hinweis

Vor dem Erscheinen von Silverlight 1.0 wurde Silverlight noch als WPF/E bezeichnet. Das E stehtdabei für »Everywhere«.

Eigenschaft Beschreibung

flexibles Inhaltsmodell Silverlight besitzt ein flexibles Inhaltsmodell. Dies bedeutet, dass ein Button und auch viele andere visuelle Elemente einen beliebigen Inhalt haben können. Beispielsweise ist es möglich, in einen Button ein Layout-Panel zu setzen und darin wiederum mehrere andere Controls zu platzie-ren. Ihrer Kreativität können Sie freien Lauf lassen, um das gewünschte Design zu finden. In Kapitel 4, »Controls«, lesen Sie mehr über die Sub-klassen von ContentControl und ItemsControl, die das flexible Inhalts-modell unterstützen.

XAML Zum Definieren der Oberfläche verwendet Silverlight die XML-basierte Beschreibungssprache XAML. XAML wird auch in der WPF zum Erstellen von Benutzeroberflächen eingesetzt. Mit XAML ist eine bessere Trennung zwischen Design und Logik möglich. In Kapitel 3, »XAML«, erfahren Sie alles Wichtige zu dieser Beschreibungssprache.

Layout In Silverlight finden Sie einige Layout-Panels, um die Controls Ihrer Anwendung dynamisch anzuordnen und zu positionieren. Aufgrund des flexiblen Inhaltsmodells lassen sich Layout-Panels auch beliebig ineinander verschachteln, wodurch auch sehr komplexe Layouts möglich sind. In der Praxis ist das Verschachteln von Layout-Panels nicht unüblich. Mehr über die Panels Grid, StackPanel und die Layout-Funktionalität von Silverlight erfahren Sie in Kapitel 5, »Layout«.

Tabelle 1.2 Wichtige Eigenschaften von Silverlight, die aus der WPF stammen

Page 46: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

54

Einführung in Silverlight1

Styles Mit einem Style legen Sie den Wert für eine oder mehrere Eigenschaften fest. Ein Style ist somit eine Sammlung von Eigenschaftswerten. Diese Sammlung lässt sich einem oder mehreren Elementen der Benutzerober-fläche zuweisen, wodurch deren Eigenschaften die Werte aus dem Style übernehmen. Sie haben damit die Möglichkeit, beispielsweise zentral in einem Style die Hintergrundfarbe, Höhe und Breite für Textboxen festzule-gen und diesen Style der Style-Property mehrerer Textbox-Objekte zuzu-weisen. Dadurch ist der XAML-Code kompakter, und die Eigenschaften lassen sich zentral im Style ändern. Mehr zu Styles erfahren Sie in Kapitel 10, »Styles und Templates«.

Templates Wird von »Templates« gesprochen, sind damit meist die sogenannten Con-trol Templates gemeint. Ein Control Template beschreibt in Silverlight das Aussehen für ein Custom Control. Das Aussehen ist von der eigentlichen Logik getrennt; es wird daher auch von »lookless« Controls gesprochen, da das Aussehen nicht im Control selbst, sondern in dessen Control Template definiert ist. Durch Ersetzen des Control Templates (indem Sie die Tem-plate-Property des entsprechenden Controls setzen) lässt sich das kom-plette Aussehen eines Controls anpassen. Dadurch sind in Silverlight nur selten Subklassen notwendig, da es oft ausreicht, ein anderes Control Tem-plate zu definieren, um das Aussehen an eigene Vorstellungen anzupassen. Mehr zu Templates in Kapitel 10, »Styles und Templates«.

Daten Die Elemente Ihrer Benutzeroberfläche können Sie mit Data Bindings an verschiedene Datenquellen binden. Dadurch sparen Sie sich das Program-mieren von Eventhandlern, die die Benutzeroberfläche oder die Daten-quelle bei einer Änderung aktualisieren. Sie haben beispielsweise die Mög-lichkeit, ein sogenanntes Element-to-Element-Binding zu erstellen. Das bedeutet, dass Sie die Eigenschaften zweier visueller Elemente aneinander binden können. Beispielsweise binden Sie die Breite eines Buttons an den aktuellen Wert eines Slider Controls. Es sind diverse Szenarien denkbar. Näheres zu Daten, Data Binding und Co. lesen Sie in Kapitel 12, »Daten«.

2D-Grafik Silverlight stellt Ihnen mächtige 2D-Möglichkeiten zur Verfügung. Dazu zählen einfache Formen (Shapes), Brushes, oder auch komplexere Geome-try-Objekte. Ebenso gibt es in Silverlight eine WriteableBitmap-Klasse, mit der Sie dynamisch ein Bitmap erzeugen und dem Benutzer anzeigen können. Das Thema 2D wird in Kapitel 15, »2D-Grafik«, behandelt.

Animationen Silverlight besitzt einen integrierten Mechanismus für Animationen. Wäh-rend Sie in vielen Programmiermodellen Animationen mit einem Timer und einem dazugehörigen Eventhandler händisch erstellen, ist dies in Sil-verlight einfacher realisiert. Zwar ist die klassische Variante auch möglich, doch Silverlight besitzt eine Reihe von Animationsklassen, die Ihnen das deklarative Erstellen von Animationen erlauben. Darüber hinaus gibt es sogenannte Easing Functions, die Effekte wie einen Aufprall (Bounce) ermöglichen. Mehr zu Animationen lesen Sie in Kapitel 16, »Animatio-nen«.

Eigenschaft Beschreibung

Tabelle 1.2 Wichtige Eigenschaften von Silverlight, die aus der WPF stammen (Forts.)

Page 47: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

55

Silverlight-Konzepte 1.3

Multimedia Audio- und Video-Elemente lassen sich einfach in Ihre Applikation einbin-den. Silverlight besitzt über die WPF hinaus umfangreiche Möglichkeiten zum Streaming von Videos. Unter anderem wird das H.264-Format für High-Definition-(HD-)Filme unterstützt. Seit Silverlight 4.0 haben Sie auch die Möglichkeit, auf die Webcam und das Mikrofon des Clients zuzugrei-fen. Näheres zum Thema Multimedia finden Sie in Kapitel 17, »Multi-media«.

Druckunterstützung Nagelneu in Silverlight 4.0 ist die Druckunterstützung. Sie haben die Mög-lichkeit, jedes visuelle Element an einen Drucker zu senden. Die WPF kann zwar einiges mehr, was die Druckunterstützung anbelangt, aber die Grund-funktionalität ist auch in Silverlight vorhanden.

Commands Seit Silverlight 4.0 unterstützen der Button und der HyperlinkButton die Commands. Commands sind Objekte vom Typ ICommand. Eine komplette Infrastruktur für Commands, wie sie in der WPF vorhanden ist, gibt es in Silverlight allerdings nicht. Mehr zu Commands erfahren Sie in Kapitel 8, »Commands«.

Eigenschaft Beschreibung

Tabelle 1.2 Wichtige Eigenschaften von Silverlight, die aus der WPF stammen (Forts.)

Hinweis

Als WPF-Entwickler werden Sie in Tabelle 1.2 einige Eigenschaften vermissen. Silverlight bietet fürfolgende in der WPF enthaltenen Konzepte keine Unterstützung:

� Trigger – In Silverlight werden nur die Event Trigger unterstützt, und dies auch in starkbeschränkter Weise. Lediglich für das Loaded-Event eines Elements kann eine Animation defi-niert werden. Definieren Sie einen Event Trigger für ein anderes Event, erhalten Sie einen Lauf-zeitfehler.

� Routed Events – In Silverlight gibt es nur die »blubbernden« Routed Events. Zudem haben Siein Silverlight im Gegensatz zur WPF nicht die Möglichkeit, eigene Routed Events zu implemen-tieren. Sie können nur die bestehenden verwenden. Mehr zu Events in Silverlight erfahren Sie inKapitel 7, »Input Events«.

� Dynamische Ressourcen – In Silverlight gibt es leider keine dynamischen Ressourcen, die mitdem Schlüsselwort DynamicResource referenziert werden. Es gibt nur die statischen Ressourcenund die zugehörige StaticResource-Markup-Extension.

� 3D-Grafik – Eine komplette 3D-API, die auf DirectX aufbaut, gibt es in Silverlight nicht. Silver-light-Elemente besitzen lediglich die Projection-Property, mit der sich 2D-Elemente andersprojizieren lassen, damit sie dreidimensional wirken.

Unter http://wpfslguidance.codeplex.com/ finden Sie ein Dokument, das alle Unterschiede zwi-schen der WPF und Silverlight verdeutlicht. Falls Sie bereits reichlich WPF-Erfahrung haben, dürftedieses Dokument durchaus interessant sein.

Page 48: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

56

Einführung in Silverlight1

Um Ihnen aus Code-Sicht einen Überblick zu geben, bevor wir mit dem Entwickeln von Sil-verlight-Anwendungen beginnen, zeige ich die wichtigsten Konzepte von Silverlight in denfolgenden Abschnitten kurz auf:

� XAML – Diese XML-basierte Beschreibungssprache wird in Silverlight wie gesagt zum Er-stellen von Benutzeroberflächen eingesetzt.

� Layout – Panels verwenden Sie, um die Elemente auf Ihrer Oberfläche anzuordnen.

� Dependency Properties – Dependency Properties sind eine spezielle Implementierungvon Properties, die das Data Binding unterstützen.

� Ressourcen – Mit Ressourcen lassen sich Objekte zentral definieren und in XAML referen-zieren.

� Styles und Templates – Mit einem Style legen Sie Werte für Properties zentral fest. DenStyle können Sie dann für mehrere Elemente nutzen. Mit Templates definieren Sie unteranderem das Aussehen für Controls.

� Data Binding – Das Binding an Daten ist wohl in fast jeder Anwendung notwendig. Hiererfahren Sie die Grundlagen.

� 3D – Ein bisschen Show muss sein zum Abschluss. Hier erfahren Sie, wie Sie mit SilverlightElemente dreidimensional rotieren.

Alle hier dargestellten Konzepte werden in späteren Kapiteln genauer betrachtet.

1.3.1 XAML

Die Extensible Application Markup Language (XAML) ist eine XML-basierte Beschreibungs-sprache, mit der Sie Objektbäume erstellen können. Zur Laufzeit werden aus den in XAMLdeklarierten XML-Elementen .NET-Objekte erzeugt. In Silverlight wird XAML zur Beschrei-bung von Benutzeroberflächen eingesetzt.

Achtung

Da Sie zum Entwickeln einer Silverlight-Anwendung im nächsten Kapitel XAML benötigen, solltenSie diese Abschnitte hier durchlesen, da sie ihnen die Grundlagen zu XAML und anderen wichtigenKonzepten vermitteln. Die Informationen an dieser Stelle sind bewusst etwas oberflächlich gehal-ten, da die Konzepte in späteren Kapiteln vertieft werden.

Hinweis

Auch die WPF verwendet XAML als Beschreibungssprache für Benutzeroberflächen. XAML ist ver-einfacht gesehen nichts anderes als ein Serialisierungsformat. Zur Laufzeit werden die Inhalte einerXAML-Datei deserialisiert und die darin definierten Objekte erzeugt.

Page 49: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

57

Silverlight-Konzepte 1.3

Um in Silverlight mit XAML eine Benutzeroberfläche zu definieren, erstellen Sie in XAMLControls, Styles, Animationen oder Data Bindings, um nur einige der Möglichkeiten zu nen-nen. Folgender Code-Schnipsel stellt bereits einen gültigen XAML-Ausschnitt dar und erstellteinen Button mit fetter Schrift, einem Rand von 10 Einheiten und dem Inhalt »OK«:

<Button Name="btnRefresh" FontWeight="Bold"

Margin="10" Content="OK"/>

Beachten Sie, dass in oberem Ausschnitt das Element der Button-Klasse zugeordnet wird unddie Attribute den Properties dieser Klasse. Zur Laufzeit wird demzufolge ein Button-Objekterstellt, dessen Properties die definierten Werte enthalten.

Anstatt das UI in XAML zu erstellen, können Sie es natürlich auch in C# definieren. FolgenderAusschnitt zeigt die C#-Variante zu oberem Button:

Button btnRefresh = new Button

{

FontWeight = FontWeights.Bold,

Margin = new Thickness(10),

Content = "OK"

};

Während Sie in XAML die Objekte für Ihre Benutzeroberfläche definieren, implementierenSie Eventhandler und sonstige Logik in C# in einer Codebehind-Datei. Ein kleines Beispielzeigt an dieser Stelle, wie XAML und die Codebehind-Datei zusammenhängen. In Kapitel 2,»Das Programmiermodell«, erfahren Sie dann mehr über die in einem Silverlight-Projekt vor-handenen Dateien und ihre Funktionen. Listing 1.1 zeigt ein User Control, das ein StackPanelenthält. Das StackPanel ist ein einfaches Panel, das Elemente stapelt. Im StackPanel befindensich eine TextBox und ein Button. Beachten Sie, dass sowohl auf der Textbox als auch auf demButton die Name-Property gesetzt ist. Ebenso ist auf dem Button-Element ein Eventhandler fürdas Click-Event definiert. Dieser Eventhandler muss in der Codebehind-Datei implementiertsein.

<UserControl x:Class="XAML.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<StackPanel>

<TextBox Name="txtTime" Margin="10 10 10 0"/>

Hinweis

Obwohl Sie die Benutzeroberfläche für eine Silverlight-Anwendung theoretisch auch komplett inC# anstatt in XAML erstellen können, ist dies nicht sinnvoll. Die Benutzeroberfläche Ihrer Anwen-dung kann, falls Sie rein in C# erstellt wurde, mit den Designer-Werkzeugen in Visual Studio oderExpression Blend eben nicht mehr bearbeitet werden.

Page 50: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

58

Einführung in Silverlight1

<Button Name="btnRefresh" FontWeight="Bold" Margin="10"

Content="Aktualisieren" Click="btnRefresh_Click"/>

</StackPanel>

</UserControl>

Listing 1.1 K01\01 XAML\MainPage.xaml

Die Codebehind-Datei zu dem in Listing 1.1 dargestellten XAML-Ausschnitt ist in Listing 1.2dargestellt. Beachten Sie, dass der in XAML definierte Eventhandler btnRefresh_Click(Listing 1.1) in der Codebehind-Datei (Listing 1.2) implementiert ist. Beachten Sie auch, dassüber die Variable txtTime auf die in XAML erstellte TextBox zugegriffen wird. txtTime ent-spricht dabei dem Wert des Name-Attributs des TextBox-Elements.

public partial class MainPage : UserControl

{

public MainPage()

{

InitializeComponent();

}

void btnRefresh_Click(object sender, RoutedEventArgs e)

{

txtTime.Text = DateTime.Now.ToLongTimeString();

}

}

Listing 1.2 K01\01 XAML\MainPage.xaml.cs

Der in Listing 1.2 in der Codebehind-Datei dargestellte Eventhandler weist der Text-Propertyder Textbox die aktuelle Zeit zu. Somit wird beim Klicken des Buttons die aktuelle Zeit in derTextbox dargestellt, was Abbildung 1.8 zeigt.

Obwohl Sie Ihre Benutzeroberfläche anstatt in XAML auch rein in C# erstellen können – unddies in Ausnahmefällen bei komplexen Oberflächen manchmal auch sinnvoll ist –, profitierenSie dann natürlich nicht von den Vorteilen, die Ihnen XAML bietet:

� Sie können mit XAML die Darstellung Ihrer Anwendung besser von der dahinterliegendenBusinesslogik trennen. Üblicherweise definieren Sie dazu in XAML die Beschreibung IhrerOberfläche und setzen die eigentliche Logik in eine Codebehind-Datei, die in einer proze-duralen Sprache wie C# programmierte Methoden und Eventhandler enthält. Das Prinzip

Abbildung 1.8 Die einfache Anwendung

Page 51: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

59

Silverlight-Konzepte 1.3

der Codebehind-Datei kennen Sie vielleicht aus ASP.NET. Auch dort werden Darstellungund Logik auf diese Weise getrennt.

� Die Beschreibung einer Benutzeroberfläche in XAML ist wesentlich kompakter und über-sichtlicher als die Erstellung in C#. XAML schraubt somit die Komplexität Ihres Codes nachunten.

� Eine XAML-Datei ist ideales Futter für einen Designer, der Ihrer Benutzeroberfläche mitTools wie Expression Blend mehr Leben und eine zeitgemäße Darstellung verleiht. DieseTools können XAML lesen und/oder exportieren.

� In XAML erstellte Benutzeroberflächen werden zur Design-Zeit stets aktuell im Silverlight-Designer dargestellt. In C# erstellte Benutzeroberflächen dagegen nicht; diese sehen Sieerst zur Laufzeit.

Wie Sie sehen, gibt es mit XAML einige Vorteile gegenüber C#. Bedenken Sie jedoch, dasXAML die Sprache C# nicht ersetzen wird. XAML ist eine deklarative Sprache, in der Sie bei-spielsweise keine Methoden definieren können. Dennoch eignet sich eine deklarative Sprachebestens für die Definition von Benutzeroberflächen.

In Kapitel 3, »XAML«, erfahren Sie mehr zu der XML-basierten Beschreibungssprache XAML.Sie lernen dort Type-Converter und sogenannte Markup-Extensions näher kennen und findenzudem reichlich Tipps und Tricks für die Sprache.

1.3.2 Layout

Für das Layout Ihrer Anwendung stehen Ihnen in Silverlight einige Panels zur Verfügung. Mitdem im vorherigen Abschnitt verwendeten StackPanel lassen sich Elemente auf einfache Artvertikal (Default) oder horizontal stapeln. Das wohl komplexeste, aber dafür auch am meisteneingesetzte Panel ist das Grid. Es ist ähnlich einer Tabelle, da es aus Zeilen und Spaltenbesteht. Der Ausschnitt in Listing 1.3 zeigt ein Grid mit drei Zeilen und zwei Spalten.

<Grid x:Name="LayoutRoot">

<Grid.RowDefinitions>

<RowDefinition/>

<RowDefinition/>

<RowDefinition/>

</Grid.RowDefinitions>

Hinweis

XAML ist eine Beschreibungssprache für Benutzeroberflächen. XAML wurde insbesondere als Aus-tauschformat zwischen Designer und Entwickler eingeführt (mehr dazu erfahren Sie in Kapitel 3,»XAML«). Bedenken Sie jedoch stets, dass Sie in XAML nichts machen können, was nicht auch inC# möglich wäre.

Page 52: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

60

Einführung in Silverlight1

<Grid.ColumnDefinitions>

<ColumnDefinition/>

<ColumnDefinition/>

</Grid.ColumnDefinitions>

<TextBox Background="LightBlue" Text="LinksOben"

Grid.Row="0" Grid.Column="0"/>

<TextBox Background="Yellow" Text="RechtsObenUndMitte"

Grid.Row="0" Grid.RowSpan="2" Grid.Column="1"/>

<TextBox Background="Lime" Text="LinksMitte"

Grid.Row="1" Grid.Column="0"/>

<TextBox Background="LightCoral" Text="Unten"

Grid.Row="2" Grid.ColumnSpan="2"/>

</Grid>

Listing 1.3 K01\02 Layout\MainPage.xaml

Das Grid in Listing 1.3 enthält vier Textboxen. Interessant ist, dass auf den Textbox-Elemen-ten Properties gesetzt werden, die in der Grid-Klasse definiert wurden. Dies sind sogenannteAttached Properties. Das Grid definiert genau vier davon: Row, Column, RowSpan undColumnSpan. Der Default-Wert ist für jede Property 0. Das heißt, in Listing 1.3 könnten nochdie Properties weggelassen werden, wo eine 0 zugewiesen wird. Sie wurden zu Demonstra-tionszwecken auch explizit deklariert. In Abbildung 1.9 finden Sie das Grid. Wie zu sehen ist,wird beispielsweise die untere Textbox in der dritten Zeile platziert (Grid.Row ist 2, und derIndex beginnt bei 0). Ebenso hat die Textbox für Grid.ColumnSpan den Wert 2, wodurch sieüber beide Spalten gestreckt wird.

In Kapitel 5, »Layout«, lernen Sie mehr über die Layout-Panels von Silverlight kennen. Sie stei-gen dort so tief ein, dass Sie auch deren interne Funktionsweise kennenlernen und in der Lagesein werden, eigene Panels zu schreiben.

1.3.3 Dependency Properties

In Silverlight lassen sich Properties auf verschiedene Arten setzen: einerseits auf dem üblichenWege direkt auf einem Objekt in C# oder in XAML, andererseits über Styles, Data Bindings

Abbildung 1.9 Das in Listing 1.3 erstellte Grid mit den vier Textboxen

Page 53: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

61

Silverlight-Konzepte 1.3

oder Animationen. Eine Dependency Property ist also »abhängig« – daher der Name Depen-dency (englisch für »Abhängigkeit«) – von mehreren Quellen in Ihrer Anwendung. Wenn eineDependency Property nicht gesetzt ist, hat sie einen Default-Wert.

Dependency Properties sind ein in der WPF verwendetes Konzept und auch in Silverlight dieGrundlage für Styles, Animationen, Data Bindings und vieles mehr. Mit einer normalen .NETProperty können Sie keinen Gebrauch von diesen »Diensten« machen. Glücklicherweise sinddie meisten Properties der Elemente in Silverlight als Dependency Property implementiertund lassen sich somit mit Animationen, Data Bindings oder Styles verwenden.

Die für viele Entwickler wichtigste Eigenschaft einer Dependency Property ist ihr integrierterBenachrichtigungsmechanismus für Änderungen, wodurch Silverlight zur Laufzeit beobach-ten kann, wann sich ihr Wert ändert. Dies macht sie auch als Quelle für ein Data Binding ideal.

Dependency Properties werden in der Laufzeitumgebung von Silverlight registriert, in dersogenannten Property Engine. Diese bildet die Grundlage für die Möglichkeiten wie ebenStyles oder Animationen.

Zusammengefasst bieten Dependency Properties folgenden Mehrwert zu klassischen .NETProperties:

� Sie haben einen integrierten Benachrichtigungsmechanismus.

� Sie besitzen einen Default-Wert.

� Viele Dienste von Silverlight, wie Animationen oder Styles, lassen sich nur mit Depen-dency Properties verwenden. Mit normalen Properties wäre es ohne weiteren Code nichtmöglich zu bestimmen, welche Quelle (Animation, Style, lokaler Wert etc.) den endgülti-gen Wert einer Dependency Property festlegt.

� Sie können als Attached Property implementiert auch auf Objekten anderer Klassen gesetztwerden. Dies wird insbesondere bei Layout-Panels genutzt.

Aus Entwicklersicht besteht eine Dependency Property aus einer klassischen .NET Property –wenn diese auch optional ist – und einem öffentlichen, statischen Feld vom Typ Dependency-Property. Dieses Feld stellt den Schlüssel zum eigentlichen Wert der Property dar.

public class Counter : DependencyObject

{

public static readonly DependencyProperty CountProperty

= DependencyProperty.Register("Count",

typeof(int),

typeof(Counter),

new PropertyMetadata(0));

public int Count

{

get { return (int)GetValue(CountProperty); }

Page 54: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

62

Einführung in Silverlight1

set { SetValue(CountProperty, value); }

}

}

Listing 1.4 Implementierung einer Dependency Property

Die Methoden GetValue und SetValue, die in Listing 1.4 in den get- und set-Accessoren der.NET Property Count aufgerufen werden, sind in der Klasse DependencyObject definiert, vonder die dargestellte Klasse Counter erbt. Jede Klasse, die Dependency Properties speichernmöchte, muss von DependencyObject abgeleitet sein.

Der obere Codeausschnitt soll Ihnen nur eine kleine Vorstellung davon geben, wie die Imple-mentierung einer Dependency Property aussieht. In Kapitel 6, »Dependency Properties«, wer-den wir diese Implementierung ausführlich betrachten. Denken Sie an dieser Stelle an dasMotto dieses Kapitels: »eine kleine Aufwärmrunde«. Wir werden uns später noch alles sehrgenau anschauen.

Auf den ersten Blick werden Sie aufgrund der Kapselung durch eine normale .NET Propertynicht bemerken, dass Sie auf eine Dependency Property zugreifen. Beispielsweise ist dieCount-Property der Counter-Klasse in Listing 1.4 als Dependency Property implementiert; sielässt sich aufgrund der Kapselung durch eine »normale« .NET Property auch wie eine solcheverwenden:

Counter counter = Counter();

counter.Count = 10;»

Sie haben aber auch immer die Möglichkeit, die von DependencyObject geerbte MethodeSetValue direkt zu benutzen. Folgender Codeausschnitt ist somit analog zu oberem:

Counter counter = Counter();

counter.SetValue(Counter.CountProperty, 10);

Neben der Kombination eines statischen Feldes vom Typ DependencyProperty mit einer nor-malen .NET Property als Wrapper treten Dependency Properties auch als Attached Propertiesauf. Das Besondere an einer Attached Property ist, dass sie Teil einer Klasse ist, aber auf Objek-ten anderer Klassen gesetzt wird. Dies mag auf den ersten Blick etwas verwunderlich klingen,wird aber insbesondere bei Layout-Panels verwendet. Kind-Elemente müssen somit nicht mitunnötig vielen Eigenschaften für jedes Layout-Panel überladen werden, da die Definition derDependency Properties im Panel selbst liegt. Wie kann das funktionieren?

Hinweis

Im Gegensatz zu einer normalen .NET Property können Sie die als Dependency Property implemen-tierte Count-Property in Animationen oder Styles verwenden.

Page 55: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

63

Silverlight-Konzepte 1.3

Das Panel definiert nur den Schlüssel für einen Wert. Dieser Schlüssel ist ein statisches Feldvom Typ DependencyProperty. Objekte, die Dependency Properties speichern, müssen zwin-gend vom Typ DependencyObject sein. Diese Klasse enthält vereinfacht gesehen eine ArtHashtable, in der mit der Methode SetValue Schlüssel-Wert-Paare gespeichert werden. AlleControls von Silverlight leiten von dieser Klasse ab und besitzen somit intern eine solche ArtHashtable. Möchten Sie auf einer Textbox eine Layout Property speichern, wird der Wert inder »Hashtable« des Textbox-Objekts unter dem in der Panel-Klasse definierten Schlüsselgespeichert. Nimmt das Panel-Objekt das Layout vor, kann es mit dem Schlüssel die für dasLayout benötigten Werte der einzelnen Controls abrufen.

XAML definiert für die Attached Properties eine eigene Syntax, die im vorherigen Abschnittim Grid in Listing 1.3 bereits verwendet wurde. Folgend eine Textbox aus diesem Grid:

<TextBox Background="Yellow" Text="RechtsObenUndMitte"

Grid.Row="0" Grid.RowSpan="2" Grid.Column="1"/>

Die Grid.Row-, die Grid.RowSpan und die Grid.Column-Property sind gesetzt. Im Hintergrundwird dadurch die SetValue-Methode auf der Textbox aufgerufen und der entsprechende Wertunter dem jeweiligen Schlüssel gespeichert. Die C#-Variante zur oberen Textbox sieht wiefolgt aus:

TextBox txt = new TextBox

{

Background = new SolidColorBrush(Colors.Yellow),

Text = "RechtsObenUndMitte"

};

txt.SetValue(Grid.RowProperty, 0);

txt.SetValue(Grid.RowSpanProperty, 2);

txt.SetValue(Grid.ColumnProperty, 1);

Nimmt das Grid, in dem sich die Textbox befindet, das Layout vor, kann es auf der Textboxdie entsprechenden Property-Werte durch den Aufruf von GetValue abfragen und so die Ele-mente in die entsprechende Zeile und Spalte setzen.

Obwohl Sie Dependency Properties wahrscheinlich meist nur bei der Implementierung eige-ner Controls benötigen, trägt es natürlich zu einem effektiveren Umgang mit Silverlight bei,wenn Sie die Dependency Properties verstehen. Beim Einstieg in Silverlight sorgen Depen-dency Properties bei den meisten Entwicklern für Missverständnis und manchmal auch füretwas Frust. Dies liegt meistens daran, dass am Anfang nicht ganz klar ist, wofür die Depen-

Hinweis

Befindet sich die oben erstellte Textbox nicht in einem Grid, lassen sich die Werte für die in derGrid-Klasse definierten Attached Properties trotzdem setzen. Die Werte werden dann einfachnicht ausgelesen.

Page 56: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

64

Einführung in Silverlight1

dency Properties denn letztlich gut sind. Schauen Sie sich nochmals den Mehrwert vonDependency Properties gegenüber klassischen .NET Properties am Anfang dieses Abschnittsan. Behalten Sie an dieser Stelle im Kopf, dass Sie die in Silverlight integrierten Animationen,Styles und vieles mehr nur mit Dependency Properties verwenden können. Auch das Prinzipder Attached Properties – die Sie unter anderem in Kapitel 5, »Layout«, noch öfter sehen wer-den – ist nur dank Dependency Properties möglich.

Da die Dependency Properties ein zentrales Konzept sind, dieser Abschnitt jedoch sichereinige Fragen offenlässt und Ihren Wissensdurst über Dependency Properties gewiss und hof-fentlich nicht gestillt hat, ist ihnen in diesem Buch ein eigenes Kapitel gewidmet. In Kapitel 6,»Dependency Properties«, erfahren Sie alle Details zu Dependency Properties und ihrer Imple-mentierung.

1.3.4 Ressourcen

Jedes Element in Silverlight besitzt eine Resources-Property. Unter dieser Resources-Pro-perty lassen sich Objekte unter einem bestimmten Schlüssel abspeichern. Im Visual Tree tieferliegende Elemente können diese Ressourcen dann auf einfache Weise unter der Angabe desSchlüssels referenzieren.

Listing 1.5 zeigt ein kleines Beispiel. In der Resources-Property eines StackPanels wird einSolidColorBrush-Objekt unter dem Schlüssel defaultBrush erstellt. Der SolidColorBrush hatdie Farbe Hellblau. Im StackPanel befinden sich zwei TextBox-Objekte, die den SolidColor-Brush für Ihre Background-Property referenzieren.

<StackPanel>

<StackPanel.Resources>

<SolidColorBrush x:Key="defaultBrush" Color="LightBlue"/>

</StackPanel.Resources>

<TextBox Background="{StaticResource defaultBrush}"/>

<TextBox Background="{StaticResource defaultBrush}"/>

</StackPanel>

Listing 1.5 K01\03 Ressourcen\MainPage.xaml

Zum Referenzieren von Ressourcen wird in XAML die sogenannte Markup-Extension Static-Resource verwendet. Diese wird gefolgt vom Schlüssel der Ressource in einem geschweiftenKlammernpaar angegeben. In Listing 1.5 wird die StaticResource-Markup-Extension mitdem Schlüssel defaultBrush in einem geschweiften Klammerpaar der Background-Propertyder beiden TextBox-Elemente zugewiesen. Beide TextBox-Elemente verwenden somit densel-ben SolidColorBrush und werden folglich hellblau dargestellt, wie Abbildung 1.10 zeigt (auchwenn dies im Schwarzweißdruck dieses Buches schlecht zu erkennen ist).

Page 57: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

65

Silverlight-Konzepte 1.3

Näheres zu Ressourcen finden Sie in Kapitel 9, »Ressourcen«. In der Praxis befinden sich inden Ressourcen übrigens oft Brush-Objekte und Animationen. Ebenso häufig sind in den Res-sourcen Styles zu finden. Und damit wären wir beim nächsten Konzept.

1.3.5 Styles und Templates

Mit einem Style lassen sich Werte für eine oder mehrere Properties definieren. Dieser Stylewird dann üblicherweise der Style-Property mehrerer Elemente zugewiesen. Dadurch wirdder XAML-Code kompakter. Setzen Sie beispielsweise auf fünf Buttons die Background-Pro-perty auf Black und die Foreground-Property auf White, könnten Sie diese Werte in einemStyle platzieren. Anstatt auf jedem Button die Properties explizit zu setzen, verwenden Sie nurnoch den Style. Der Style wird dabei üblicherweise als Ressource definiert und mit Static-Resource vom jeweiligen Element referenziert.

In Silverlight besitzen Controls eine Template-Property vom Typ ControlTemplate. Das Con-trolTemplate bestimmt den Visual Tree und damit das Aussehen eines Controls. Während sichmit einem Style nur Werte für Properties definieren lassen, haben Sie mit einem Template dieMöglichkeit, das grundlegende Aussehen eines Controls komplett frei nach Ihren Wünschenzu Definieren. Oft wird die Template-Property in einen als Ressource definierten Style gesetzt.Dadurch lässt sich das »Aussehen« über den Style auf mehrere Elemente anwenden. So ist esauch in Listing 1.6 der Fall.

In Listing 1.6 ist in der Resources-Property eines StackPanels unter dem Schlüssel Thomas-ButtonStyle ein Style für Button-Elemente definiert. Der Style legt die Werte für die Proper-ties Background, Foreground, Margin und Template fest. Dazu befinden sich innerhalb desStyles mehrere Setter-Elemente. Beachten Sie auch das ControlTemplate. Es definiert, dassein Button mit diesem Style aus einem Border-Element und einem ContentPresenter exis-tiert.

<StackPanel>

<StackPanel.Resources>

<Style x:Key="ThomasButtonStyle" TargetType="Button">

<Setter Property="Background" Value="Black"/>

<Setter Property="Foreground" Value="White"/>

<Setter Property="Margin" Value="5"/>

<Setter Property="Template">

<Setter.Value>

<ControlTemplate>

Abbildung 1.10 Zwei hellblaue TextBox-Elemente

Page 58: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

66

Einführung in Silverlight1

<Border Background="{TemplateBinding Background}"

BorderBrush="{TemplateBinding BorderBrush}"

BorderThickness="{TemplateBinding BorderThickness}"

CornerRadius="5">

<ContentPresenter

HorizontalAlignment="{TemplateBinding

HorizontalContentAlignment}"

VerticalAlignment="{TemplateBinding

VerticalContentAlignment}"/>

</Border>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

</StackPanel.Resources>

<Button Style="{StaticResource ThomasButtonStyle}"

Content="Hallo"/>

<Button Style="{StaticResource ThomasButtonStyle}"

Content="Silverlight"/>

</StackPanel>

Listing 1.6 K01\04 StylesUndTemplates\MainPage.xaml

Im StackPanel in Listing 1.6 befinden sich zwei Button-Objekte, die mit der StaticResource-Markup-Extension den Style ThomasButtonStyle referenzieren. Beide Buttons werden somitmit schwarzem Hintergrund, weißer Schrift, einem Rand von 5 und einem Eckradius von 5dargestellt (Abbildung 1.11). Der Eckradius von 5 ist im ControlTemplate auf dem Border-Ele-ment über die CornerRadius-Property definiert.

Obwohl die Buttons mit dem im Style in Listing 1.6 erstellten ControlTemplate ein grund-legend neues Aussehen haben, ist das ControlTemplate noch nicht fertig. Es unterstützt nochkeine Effekte wie MouseOver. Für solche Effekte kommt in Silverlight innerhalb des Control-Templates der sogenannte VisualStateManager (VSM) zum Einsatz. Mehr zu Styles, Templatesund dem VisualStateManager erfahren Sie in Kapitel 10, »Styles und Templates«.

1.3.6 Data Binding

Listing 1.7 zeigt ein kleines Beispiel des aus der WPF bekannten Element-to-Element-Bin-dings, das in Silverlight seit Version 3.0 unterstützt wird. Die Text-Property eines TextBlock-

Abbildung 1.11 Buttons mit speziellem ControlTemplate

Page 59: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

67

Silverlight-Konzepte 1.3

Elements wird in Listing 1.7 an die Value-Property eines Slider-Elements gebunden. Um inXAML ein Data Binding zu erstellen, wird die Binding-Markup-Extension verwendet. Mit derElementName-Property des Binding-Objekts lässt sich der Name jenes Elements angeben, dasals Datenquelle dienen soll. In Listing 1.7 ist dies der Slider mit dem Namen sli.

<StackPanel>

<Slider Name="sli"/>

<TextBlock Text="{Binding ElementName=sli,Path=Value}"/>

</StackPanel>

Listing 1.7 K01\05 DataBinding\MainPage.xaml

Das TextBlock-Element zeigt dank des Data Bindings stets den aktuellen Wert des Slider-Ele-ments an (Abbildung 1.12).

In Silverlight 2.0 war für eine Funktionalität, wie Sie hier durch ein Element-to-Element-Binding erreicht wird, etwas mehr Arbeit nötig. Entweder musste ein Eventhandler für dasValueChanged-Event des Sliders implementiert werden, der den TextBlock aktualisiert, oderes musste ein Datenobjekt erstellt werden, an das sich sowohl der Slider als auch der Text-Block binden. Seit Silverlight 3.0 ist glücklicherweise dank des dort eingeführten Element-to-Element-Bindings weder das eine noch das andere notwendig, sondern Sie können direkt andie Eigenschaften eines anderen visuellen Elements binden. Mehr zum Umgang mit Datenund zum Data Binding lesen Sie in Kapitel 12, »Daten«.

1.3.7 3D

In Silverlight haben Elemente eine Projection-Property. Darüber lassen sich perspektivischeTransformationen definieren, um einen 3D-Effekt zu erzielen. Silverlight besitzt zwei Klassenvom Typ Projection: die Klasse Matrix3DProjection und die Klasse PlaneProjection. Ersteerlaubt die direkte Manipulation der 4×4-Matrix, die eine Transformation im dreidimensiona-len Raum beschreibt. Die PlaneProjection-Klasse bietet dagegen einfache Properties, mitdenen Sie relativ simpel einen 3D-Effekt erzielen.

Listing 1.8 enthält ein StackPanel, in dem sich ein paar weitere Elemente befinden. Auf demStackPanel ist die Projection-Property gesetzt. Sie enthält ein PlaneProjection-Element, des-sen RotationY-Property den Wert 45 enthält. Das gesamte StackPanel wird somit 45 Grad umdie y-Achse gedreht.

<StackPanel Background="Black" ...>

<StackPanel.Projection>

Abbildung 1.12 Element-to-Element-Binding

Page 60: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

68

Einführung in Silverlight1

<PlaneProjection RotationY="45"/>

</StackPanel.Projection>

<TextBox Text="Hallo" Margin="10"/>

<TextBox Text="Perspective3D" Margin="10"/>

<TextBox Text="Um 45°" Margin="10"/>

<TextBox Text="gedreht" Margin="10"/>

<CheckBox IsChecked="True" Content="gute Sache" Margin="10"/>

<Button Content="OK" Width="75" Margin="10"/>

</StackPanel>

Listing 1.8 K01\06 DreiD\MainPage.xaml

In Abbildung 1.13 ist das StackPanel aus Listing 1.8 zu sehen. Es wird jetzt so auf den Bild-schirm projiziert (daher heißt die Property Projection), dass es dreidimensional wirkt. DieElemente im StackPanel reagieren nach wie vor auf Benutzereingaben.

Die in diesem Buch verwendete Beispielanwendung FriendStorageOnline nutzt ebenfalls einePlaneProjection, die dort sogar noch animiert wird, damit sich ein Dreh-Effekt ergibt. Wirdbeispielsweise ein neuer Freund angelegt, dreht sich die Hauptansicht mit einer animiertenPlaneProjection weg, wie Abbildung 1.14 zeigt. Die zum Anlegen des neuen Freundes benö-tigte Ansicht dreht sich ebenfalls mit einer animierten PlaneProjection herein, sobald dieHauptansicht 90 Grad erreicht und somit nicht mehr zu sehen ist. Dadurch sieht es für denBenutzer so aus, als ob das UserControl zum Anlegen eines neuen Freundes auf der Rückseiteder Hauptansicht liegt. Sobald der neue Freund angelegt wurde, startet der Dreh-Effekt erneutund zeigt wieder die Hauptansicht an.

Abbildung 1.13 Um 45 Grad gedrehtes StackPanel

Page 61: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

69

Silverlight-Konzepte 1.3

Hinweis

Beachten Sie, wie in Abbildung 1.14 ein weiteres grafisches Feature zum Einsatz kommt, nämlichein BlurEffect. Wird die Hauptansicht weggedreht, wird das Navigationsmenü der FriendStorage-Online-Anwendung mit einem BlurEffect unscharf dargestellt, um dem Benutzer zu zeigen, dassder Hauptaugenmerk jetzt auf der Eingabe eines neuen Freundes liegt. Mehr zum BlurEffect inKapitel 15, »2D-Grafik«.

Abbildung 1.14 Animierte PlaneProjection in FriendStorageOnline

Hinweis

Die 3D-Unterstützung in Silverlight beschränkt sich auf die hier gezeigten Projektionen. In der WPFgibt es dagegen eine komplette 3D-API, mit der sich 3D-Objekte anlegen lassen. Im dreidimen-sionalen Raum werden diese Objekte zusammen mit einer Kamera platziert und können dannbetrachtet werden. Silverlight bietet die Möglichkeit der »echten« 3D-Objekte und der Kameranicht. Stattdessen lassen sich nur 2D-Elemente einfach in dieser Weise auf den Bildschirm projizie-ren, damit sie dreidimensional wirken.

Page 62: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

70

Einführung in Silverlight1

In Kapitel 5, »Layout«, erfahren Sie mehr zu Projektionen. Dort erkläre ich auch, wie ich dieProjektionen in FriendStorageOnline erstellt habe.

1.4 Zusammenfassung

Silverlight ist ein Browser-Plugin, mit dem das Entwickeln grafischer und multimedialerAnwendungen, aber auch das Entwickeln von Geschäftsanwendungen für das Web auf einfa-che Weise möglich ist.

Silverlight enthält Elemente der Windows Presentation Foundation, eine Untermenge des.NET Frameworks und einen Browser Host, der insbesondere die Installationsroutine und dieAktualisierungen des Plugins managt. Da Silverlight eine Untermenge von .NET verwendet,lassen sich Silverlight-Anwendungen in C# oder in VB.NET entwickeln.

Eine Silverlight-Anwendung wird beim Besuch einer Webseite initial heruntergeladen undkommuniziert dann über Webservices mit dem Server. Üblicherweise werden dann nur nochDaten übergeben. Silverlight läuft also weitestgehend auf dem Client ab und erlaubt deshalbdas Beste aus der Client- und der Webwelt. Silverlight ist somit ein Wegbereiter für die soge-nannten Rich Internet Applications (RIA). Als solche werden Internetanwendungen bezeich-net, die Merkmale von klassischen Desktopanwendungen aufweisen.

Silverlight bietet zahlreiche nützliche Features: .NET-basierte Programmiersprache, ein Mini-.NET-Framework usw. Deren Client benötigt zum Ausführen nur das Silverlight-Plugin undnicht das große .NET Framework.

Da Silverlight eine Untermenge der Windows Presentation Foundation ist, kommen auchzahlreiche Stärken der WPF in Silverlight zum Tragen – Styles, Templates, Data Binding oderXAML, um nur einige zu nennen. Diese werden im späteren Verlauf dieses Buches aufgezeigt.

Im nächsten Kapitel werden wir uns das Programmiermodell von Silverlight ansehen. Dazulernen Sie die wichtigsten Klassen für das User Interface kennen. Zudem erstellen wir natür-lich die erste Silverlight-Anwendung, und Sie erhalten einen Überblick über die darin enthal-tenen Dateien und über die Struktur.

Page 63: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1001

Das Abspielen von Audio- und Videodateien, der Zugriff auf die Webcam und das Mikrofon eines Benutzers sowie das Erstellen von Deep-Zoom-Anwendungen stelle ich Ihnen in diesem Kapitel unter dem Begriff »Multimedia« vor.

17 Multimedia

In diesem Kapitel lernen Sie, wie Sie in Silverlight Musik- und Videodateien abspielen, auf dieWebcam und das Mikrofon des Benutzers zugreifen und Deep Zoom in Ihre Anwendung inte-grieren.

Silverlight unterstützt verschiedene Audioformate wie ACC oder MP3 und verschiedeneVideoformate wie WMVA oder H.264. Um eine Audio- oder Videodatei abzuspielen, nutzenSie die Klasse MediaElement. Welche Funktionen die Klasse MediaElement dafür bietet undwelche Formate genau unterstützt werden, lesen Sie in Abschnitt 17.1.

Zum Zugriff auf die Webcam und das Mikrofon des Benutzers finden Sie im Namespace Sys-tem.Windows.Media ebenfalls ein paar Klassen, die in Abschnitt 17.2 vorgestellt werden. Neh-men Sie beispielsweise über das Mikrofon eine Audiodatei auf, oder »knipsen« Sie über dieWebcam ein Bild des Benutzers.

Eine ganz andere Form von Multimedia ist die von Silverlight unterstützte Deep-Zoom-Funk-tionalität. Damit lassen sich hochauflösende Bilder ineinander verschachteln. Der Benutzerkann dann in ein Bild hineinzoomen, um Details oder sogar eventuell weitere versteckte Bil-der zu sehen. Deep Zoom ist unser Thema im letzten Abschnitt dieses Kapitels.

17.1 Audio und Video

In diesem Abschnitt schauen wir uns das Abspielen von Audio- und Videodateien mit derKlasse MediaElement an. Dabei lernen Sie, wie Sie neben dem einfachen Abspielen auf even-tuelle Fehler reagieren, wie Sie den Abspielvorgang steuern, wie Sie auf sogenannte Markerin einer Videodatei reagieren, wie Sie Wiedergabelisten verwenden und vieles mehr. Bevor eslosgeht, werfen wir einen Blick auf die in Silverlight unterstützten Formate.

Page 64: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1002

Multimedia17

17.1.1 Die unterstützten Formate

Bevor Sie eine Audio- oder eine Videodatei einbinden, sollten Sie sicherstellen, ob Silverlightdas Format Ihrer Datei überhaupt verarbeiten kann. Dazu schauen wir uns in diesemAbschnitt kurz die unterstützten Formate an. Beginnen wir mit den Audioformaten. Silver-light unterstützt die folgenden Formate für Audiodateien:

� Windows Media Audio (WMA), Versionen 7 bis 10

� Advanced Audio Coding (AAC), auch als MP4 bekannt.

� MP3 (ISO/MPEG Layer-3), mono/stereo, Bitraten von 8 bis 320 kbps oder variabel

Im Videobereich unterstützt Silverlight die folgenden Formate:

� Windows Media Video (WMV), Versionen 7 bis 9

� Windows Media Video Advanced Profile, non-VC-1 (WMVA)

� Windows Media Video Advanced Profile, VC-1 (WMVC1)

� H.264

Wie Sie sehen, werden einige Formate unterstützt. Nicht unterstützt werden Formate wieWindows Media Screen, Windows Media Audio Professional, Windows Media Voice odereine Kombination aus WMV-Video und MP3-Audio. Auch Videos mit ungeraden Größen fürdie Höhe und Breite, wie beispielsweise 147 × 165, kann Silverlight nicht darstellen. WerfenSie für eine detailliertere Auflistung der nicht unterstützten Formate einen Blick in die Silver-light-Dokumentation. Schauen wir uns jetzt an, wie Sie Audio- und Videodateien abspielen.

17.1.2 Eine Audiodatei abspielen

Das Abspielen einer Audiodatei erweist sich als relativ einfach: Fügen Sie zu Ihrem Silverlight-Projekt eine .mp3-Datei hinzu, und betten Sie diese Datei mit dem Buildvorgang Resource inIhre Assembly ein.

In der MainPage platzieren Sie zum Abspielen der .mp3-Datei ein MediaElement. Da dieKlasse MediaElement von FrameworkElement erbt, lässt es sich an jeder beliebigen Stelle

Hinweis

Die .mp3-Datei können Sie auch gemäß den binären Ressourcen aus Kapitel 9, »Ressourcen«, mitdem Buildvorgang Inhalt in die .xap-Datei packen. Vergessen Sie dabei nicht einzustellen, dass Siedie Datei immer ins Ausgabeverzeichnis kopieren.

Alternativ haben Sie die Möglichkeit, die Datei vom Webserver zu laden. Bedenken Sie dabei diein Kapitel 13, »Services und Kommunikation«, beschriebenen Cross-Domain-Zugriffe, falls Sie dieDatei von einer fremden Domäne herunterladen.

Dieselben Prinzipien gelten natürlich auch für die später beschriebenen Videodateien.

Page 65: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1003

Audio und Video 17.1

platzieren, beispielsweise in einem Panel. Der Source-Property (Typ Uri) weisen Sie den Pfadzur .mp3-Datei zu, und schon wird die Datei abgespielt. Listing 17.1 zeigt ein einfaches Bei-spiel.

<Grid x:Name="LayoutRoot" Background="White">

<MediaElement Source="guitarIntro.mp3"/>

</Grid>

Listing 17.1 K17\01 AudioAbspielen\MainPage.xaml

Die MediaElement-Klasse spielt die der Source-Property zugewiesene Datei automatisch ab.Falls Sie dies nicht wünschen, setzen Sie die AutoPlay-Property auf false. Steuern Sie dannden Abspielvorgang in C# mit Methoden wie Play, Pause oder Stop. Dazu mehr in Abschnitt17.1.5, »Das Abspielen steuern«.

17.1.3 Eine Videodatei abspielen

Das Abspielen einer Videodatei erfolgt nach dem genau gleichen Muster wie das Abspieleneiner Audiodatei. Fügen Sie eine Videodatei zu Ihrem Projekt hinzu, und geben Sie im Eigen-schaften-Fenster von Visual Studio als Buildvorgang Resource an. Platzieren Sie in der Main-Page ein MediaElement, und setzen Sie die Source-Property des MediaElements auf den Pfadzur Videodatei. In Listing 17.2 heißt die Videodatei thomasOnGuitar.wmv.

<Grid x:Name="LayoutRoot" Background="White">

<MediaElement Source="thomasOnGuitar.wmv"

Width="300" Height="200"/>

</Grid>

Listing 17.2 K17\02 VideoAbspielen\MainPage.xaml

Beim Abspielen von Videos kommt im Gegensatz zu Audiodateien die Darstellung des Media-Elements ins Spiel. Die Klasse MediaElement besitzt die Read-only-Properties NaturalVideo-Width und NaturalVideoHeight, die die natürliche Größe des geladenen Videos zurückgeben.Die in den Properties enthaltenen double-Werte sind allerdings erst verfügbar, wenn das

Tipp

Die Klasse MediaElement erbt von FrameworkElement. Da Sie allerdings beim Abspielen vonAudiodateien nicht wirklich ein visuelles Element haben möchten, können Sie die Visibility-Property auch einfach auf Collapsed setzen.

Tipp

Um in C# die Quelle des MediaElements zu setzen, können Sie auch die SetSource-Methode ver-wenden. Diese nimmt einen Stream mit der Audio-/Videodatei entgegen.

Page 66: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1004

Multimedia17

Video geladen wurde. Sobald das Video geladen wurde, wird das MediaOpened-Event ausge-löst. Ein Eventhandler für dieses Event bildet somit eine gute Stelle, um auf die PropertiesNaturalVideoWidth und NaturalVideoHeight zuzugreifen.

Per Default wird ein Video innerhalb des MediaElements gestreckt, so dass es den maximalenPlatz einnimmt. Dabei wird allerdings das Seitenverhältnis des Videos beibehalten. Wie dasVideo gestreckt wird, bestimmen Sie über die Stretch-Property vom Typ der gleichnamigenAufzählung, die die folgenden vier Werte enthält. Beachten Sie dabei Abbildung 17.1, die dieAuswirkung der Werte visuell darstellt.

� Uniform – der Default-Wert. Das Video wird vergrößert, bis die Breite oder Höhe des Me-diaElements erreicht ist. Das Verhältnis von Breite und Höhe des Videos wird beim Skalie-ren beibehalten.

� None – das Video wird überhaupt nicht skaliert und mit den Werten der Properties Natu-ralVideoWidth und NaturalVideoHeight dargestellt.

� UniformToFill – das Video wird vergrößert, bis das MediaElement komplett ausgefüllt ist.Das Verhältnis von Breite und Höhe des Videos wird beim Skalieren beibehalten.

� Fill – das Video füllt das MediaElement komplett aus. Das Verhältnis von Breite und Höhedes Videos wird beim Skalieren nicht beachtet.

Abbildung 17.1 Die unterschiedlichen Werte der Stretch-Property

Hinweis

Das in Kapitel 4, »Controls«, beschriebene Viewbox-Element besitzt ebenfalls eine Stretch-Pro-perty wie das MediaElement. Dort wird statt eines Videos das in der Viewbox enthaltene Elementgestreckt.

Page 67: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1005

Audio und Video 17.1

17.1.4 Auf Fehler reagieren

Setzen Sie die Source-Property des MediaElements auf eine nicht vorhandene Datei oder aufeine Datei mit einem ungültigen Format, wirft das MediaElement keine Exception. Um einenFehler mitzubekommen, benötigen Sie einen Eventhandler für das MediaFailed-Event:

<MediaElement Source="thomasOnGuitar.wmv"

MediaFailed="MediaElement_MediaFailed"/>

Im Eventhandler zeigen Sie dem Benutzer dann gegebenenfalls eine Information an, wie diesin Listing 17.3 gemacht wird:

void MediaElement_MediaFailed(object sender,

ExceptionRoutedEventArgs e)

{

MessageBox.Show("Die Videodatei wurde nicht gefunden"

+ " oder nicht geöffnet werden!");

}

Listing 17.3 K17\04 MediaFailedEvent\MainPage.xaml.cs

In der ErrorException-Property der ExceptionRoutedEventArgs finden Sie die aufgetreteneException. Die darin enthaltene Nachricht ist allerdings nicht immer ganz aufschlussreich.

17.1.5 Das Abspielen steuern

Um das Abspielen zu steuern, besitzt die Klasse MediaElement diverse Methoden und Proper-ties. Mit den Methoden Play, Pause und Stop starten, pausieren und stoppen Sie eine Audio-oder eine Videodatei. Die Property Position enthält ein TimeSpan-Objekt mit der aktuellenPosition, die Property NaturalDuration ein Duration-Objekt mit der Gesamtdauer. WeisenSie der Position-Property ein TimeSpan-Objekt zu, um zu einer bestimmten Zeit zu springen.

Das MediaElement besitzt auch eine CurrentState-Property vom Typ der Aufzählung Media-ElementState. Diese enthält Werte wie Opening, Playing, Paused, Stopped, Closed etc.

Hinweis

Mit einem VideoBrush lässt sich der Inhalt eines MediaElements an beliebige Stellen zeichnen. DerVideoBrush wurde in Kapitel 15, »2D-Grafik«, beschrieben.

Hinweis

Das Ändern der Position-Property ist bei Live-Streams nicht möglich. Prüfen Sie vor dem Ändernder Position-Property die CanSeek-Property. Gibt diese true zurück, kann die Position geändertwerden.

Page 68: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1006

Multimedia17

Passend dazu gibt es das CurrentStateChanged-Event, das bei jeder Änderung der Current-State-Property ausgelöst wird.

Beim erfolgreichen Öffnen einer Audio- oder Videodatei wird das MediaOpened-Event ausge-löst. Ist das Ende der Datei erreicht, findet das MediaEnded-Event statt.

Auch zum Steuern der Audioausgabe besitzt die Klasse MediaElement zahlreiche Properties.Mit der Volume-Property definieren Sie die Lautstärke mit einem Wert zwischen 0 und 1. DerDefault-Wert ist 0.5. Setzen Sie die IsMuted-Property auf true, um den Ton auszuschalten.Mit Balance legen Sie die Verteilung auf den linken und rechten Lautsprecher fest. DerDefault-Wert ist 0. Mit dem Wert –1 wird alles auf dem linken Lautsprecher ausgegeben, mitdem Wert 1 alles auf dem rechten.

Schauen wir uns ein kleines Beispiel an, das einige dieser Properties verwendet. Abbildung17.2 zeigt das Beispiel. Ein Video läuft in einem MediaElement. Über einen ToggleButton lässtsich das Video pausieren und starten. Mit einem Slider lässt sich die Position verändern. Dieaktuelle Position wird zudem als Zeit angezeigt. Lautstärke (Volume), Balance und Stumm-schaltung (IsMuted) lassen sich ebenfalls über zwei Slider und eine CheckBox einstellen.Schauen wir uns die Details an.

Tipp

Um beispielsweise mit einer Audiodatei eine Endlosschleife zu erstellen, installieren Sie einenEventhandler für das MediaEnded-Event. Darin rufen Sie auf Ihrem MediaElement einfach wiederdie Play-Methode auf. Vor dem Aufruf der Play-Methode müssen Sie allerdings die Position desMediaElements wieder zurücksetzen. Dazu rufen Sie entweder die Stop-Methode auf oder setzendie Position-Property entsprechend manuell zurück.

Abbildung 17.2 Ein Video mit den Methoden und Properties der MediaElement-Klasse steuern

Page 69: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1007

Audio und Video 17.1

Das MediaElement der Anwendung aus Abbildung 17.2 ist in Listing 17.4 dargestellt. Es hatden Namen mediaElement und gibt das Video thomasOnGuitar.wmv wieder. Die AutoPlay-Property ist auf false gesetzt, damit das Video nicht automatisch abgespielt wird. Zudem sindEventhandler für die Events MediaOpened, MediaEnded und CurrentStateChanged definiert,deren Code wir uns gleich nach und nach ansehen.

<MediaElement x:Name="mediaElement" Source="thomasOnGuitar.wmv"

AutoPlay="False" MediaOpened="mediaElement_MediaOpened"

MediaEnded="mediaElement_MediaEnded"

CurrentStateChanged="mediaElement_CurrentStateChanged" .../>

Listing 17.4 K17\05 AbspielenKontrollieren\MainPage.xaml

Die Oberfläche enthält einen ToggleButton zum Starten und Pausieren des Videos. Auf demToggleButton sind Eventhandler für die Events Checked und Unchecked definiert:

<ToggleButton x:Name="btnPlayPause" Width="75" Content="Play"

Checked="btnPlayPause_Checked"

Unchecked="btnPlayPause_Unchecked".../>

Listing 17.5 zeigt die Eventhandler des ToggleButtons. Darin wird auf dem MediaElement diePlay- und Pause-Methode aufgerufen und der Inhalt des ToggleButtons entsprechend gesetzt.In Listing 17.5 sehen Sie zudem einen Ausschnitt des MediaEnded-Eventhandlers. Darin wirddie IsChecked-Property des ToggleButtons auf false gesetzt, wodurch das Unchecked-Eventausgelöst wird und der ToggleButton wieder den Text Play anzeigt.

void mediaElement_MediaEnded(object sender, RoutedEventArgs e)

{

...

btnPlayPause.IsChecked = false;

}

void btnPlayPause_Checked(object sender, RoutedEventArgs e)

{

mediaElement.Play();

btnPlayPause.Content = "Pause";

}

void btnPlayPause_Unchecked(object sender, RoutedEventArgs e)

{

mediaElement.Pause();

btnPlayPause.Content = "Play";

}

Listing 17.5 K17\05 AbspielenKontrollieren\MainPage.xaml.cs

Sehr interessant ist in Abbildung 17.2 der Slider mit der Position. Tatsächlich sind in XAMLzwei Slider übereinandergelegt, wie Listing 17.6 zeigt. Der Slider mit dem Namen slider-

Page 70: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1008

Multimedia17

PosCurrent zeigt lediglich die aktuelle Position an. Der andere Slider dient dem Benutzerdazu, eine bestimmte Position auszuwählen.

<Grid Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left">

<Slider x:Name="sliderPosSeek"

ValueChanged="sliderPosSeek_ValueChanged" Width="200"/>

<Slider x:Name="sliderPosCurrent" IsHitTestVisible="False"

Opacity="0.7" Width="200"/>

</Grid>

Listing 17.6 K17\05 AbspielenKontrollieren\MainPage.xaml

Beachten Sie in Listing 17.6, dass auf dem zweiten Slider die IsHitTestVisible-Property denWert false hat. Dadurch reagiert dieser Slider nicht auf Benutzereingaben. Er ist zudem mitder Opacity-Property leicht transparent dargestellt.

Um die aktuelle Position des Sliders sliderPosCurrent in der Codebehind-Datei zu setzen,wird zunächst im MediaOpened-Eventhandler die Maximum-Property des Sliders auf die Längedes Videos in Sekunden gesetzt:

private void mediaElement_MediaOpened(object sender,

RoutedEventArgs e)

{

double totalSeconds =

mediaElement.NaturalDuration.TimeSpan.TotalSeconds;

sliderPosCurrent.Maximum = totalSeconds;

sliderPosSeek.Maximum = totalSeconds;

}

Um nun beim Abspielen des Videos die Value-Property des Sliders sliderPosCurrent mit derPosition-Property des MediaElements abzugleichen, wird ein DispatcherTimer benötigt.Listing 17.7 zeigt den entsprechenden Ausschnitt in der Codebehind-Datei. Im Konstruktorder MainPage wird die Klassenvariable _timer mit einer neuen DispatcherTimer-Instanzinitialisiert. Als Interval werden 10 Millisekunden angegeben. Im Tick-Eventhandler desDispatcherTimers wird Value-Property des Sliders auf die in der Position-Property desMediaElements enthaltenen Sekunden gesetzt.

public partial class MainPage : UserControl

{

private DispatcherTimer _timer;

public MainPage()

{

InitializeComponent();

_timer = new DispatcherTimer();

_timer.Interval = TimeSpan.FromMilliseconds(10);

_timer.Tick += timer_Tick;

}

Page 71: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1009

Audio und Video 17.1

void timer_Tick(object sender, EventArgs e)

{

sliderPosCurrent.Value = mediaElement.Position.TotalSeconds;

// DateTime wird nur für string.Format erstellt

DateTime dt = new DateTime(mediaElement.Position.Ticks);

txtPosition.Text = string.Format("{0:mm:ss.ff}", dt);

}

...

}

Listing 17.7 K17\05 AbspielenKontrollieren\MainPage.xaml.cs

Wenn Sie Listing 17.7 genau betrachten, werden Sie feststellen, dass die Start-Methode desDispatcherTimers überhaupt nicht aufgerufen wird. Das passiert im Eventhandler für das Cur-rentStateChanged-Event. Listing 17.8 zeigt den Code. Ist das MediaElement im ZustandPlaying, wird der DispatcherTimer gestartet, ansonsten gestoppt. Folglich wird die Positiondes Sliders immer dann aktualisiert, wenn das MediaElement etwas abspielt.

void mediaElement_CurrentStateChanged(object sender,

RoutedEventArgs e)

{

switch (mediaElement.CurrentState)

{

case MediaElementState.Playing:

_timer.Start();

break;

default:

_timer.Stop();

break;

}

}

Listing 17.8 K17\05 AbspielenKontrollieren\MainPage.xaml.cs

Hinweis

Beachten Sie in Listing 17.7 auch, dass im Tick-Eventhandler auch der TextBlock namens txtPo-sition aktualisiert wird. Dieser zeigt in Abbildung 17.2 die Zeit der aktuellen Position an. Um dieFormat-Methode der String-Klasse zu verwenden, wurde in Listing 17.7 aus dem TimeSpan-Objekt eine DateTime-Instanz erstellt, die den verwendeten Format-String mm:ss.ff unterstützt.

Hinweis

In Listing 17.8 hätte natürlich auch ein if/else-Block statt einer switch-Anweisung gereicht.Allerdings ist bei Aufzählungen eine switch-Anweisung die schönere Variante, da sie einfach undüberschaubar zu erweitern ist.

Page 72: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1010

Multimedia17

Während der Slider sliderPosCurrent nur zum Anzeigen der Position dient, ist der SlidersliderPosSeek dazu gedacht, dem Benutzer eine Auswahl der aktuellen Position zu ermögli-chen. Der sliderPosSeek liegt direkt unter dem sliderPosCurrent, wie Listing 17.6 gezeigthat. Auf dem Slider sliderPosSeek ist ein Eventhandler für das ValueChanged-Event instal-liert. Darin wird die Position-Property des MediaElements entsprechend gesetzt, was inListing 17.9 zu sehen ist.

void sliderPosSeek_ValueChanged(object sender,

RoutedPropertyChangedEventArgs<double> e)

{

mediaElement.Position =

TimeSpan.FromSeconds(sliderPosSeek.Value);

mediaElement.Play();

}

Listing 17.9 K17\05 AbspielenKontrollieren\MainPage.xaml.cs

Im MediaEnded-Eventhandler werden die Positionen beider s wieder auf 0 gesetzt, wodurchdas Video erneut abgespielt werden kann:

void mediaElement_MediaEnded(object sender, RoutedEventArgs e)

{

sliderPosSeek.Value = 0;

sliderPosCurrent.Value = 0;

btnPlayPause.IsChecked = false;

}

Neben den gezeigten Elementen enthält die Anwendung aus Abbildung 17.2 Controls zumSteuern der Properties Volume, Balance und IsMuted. Diese Properties eignen sich bestens fürein Data Binding. Es wird somit kein Code in der Codebehind-Datei benötigt. Listing 17.10zeigt die entsprechenden Elemente zum Steuern dieser Properties. Der erste Slider ist an dieVolume-Property des MediaElements gebunden. Beachten Sie, dass die Maximum-Property desSliders den Wert 1 hat. Der zweite Slider ist an die Balance-Property des MediaElementsgebunden. Beachten Sie auch hier die Properties Minimum und Maximum des Sliders. Die Check-Box ist an die IsMuted-Property gebunden und kann somit den Ton ausschalten.

<Slider Width="200" Maximum="1" Value="{Binding

ElementName=mediaElement,Path=Volume,Mode=TwoWay}" .../>

...

<Slider Width="200" Minimum="-1" Maximum="1" Value="{Binding

ElementName=mediaElement,Path=Balance,Mode=TwoWay}" .../>

...

<CheckBox Content="IsMuted" IsChecked="{Binding

ElementName=mediaElement,Path=IsMuted,Mode=TwoWay}" .../>

Listing 17.10 K17\05 AbspielenKontrollieren\MainPage.xaml

Page 73: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1011

Audio und Video 17.1

17.1.6 Video Marker verwenden

Videodateien lassen sich mit Markierungen ausstatten. Diese werden auch als Video Markeroder einfach nur Marker bezeichnet. Die Marker dienen einerseits der Information, anderer-seits kann zu einer solchen Markierung gesprungen werden.

Die MediaElement-Klasse besitzt das Event MarkerReached, das auftritt, sobald ein Video Mar-ker erreicht wird. Folgendes MediaElement definiert einen Eventhandler für das Event:

<MediaElement Source="thomasOnGuitarWithMarkers.wmv"

MarkerReached="MediaElement_MarkerReached" .../>

Über die Marker-Property der TimelineMarkerRoutedEventArgs erhalten Sie im Eventhandlerden Marker, wie Listing 17.11 zeigt. Der Marker ist vom Typ TimelineMarker und enthält dieProperties Text und Time. In Listing 17.11 wird im MarkerReached-Eventhandler die Text-Property des Markers der Text-Property eines TextBlocks zugewiesen.

private void MediaElement_MarkerReached(object sender,

TimelineMarkerRoutedEventArgs e)

{

txtMarker.Text = e.Marker.Text;

}

Listing 17.11 K17\06 VideoMarker Teil1\MainPage.xaml.cs

Abbildung 17.3 zeigt die Anwendung. Ganz oben wird der Text des aktuellen Markers ange-zeigt.

Hinweis

Um eine Videodatei mit Markern auszustatten, nutzen Sie ein entsprechendes Videoprogramm.Microsoft bietet als Teil der Expression Suite das Programm Expression Encoder an. Darin lassensich Video Marker setzen.

Abbildung 17.3 Durch das MarkerReached-Event wird der Text des aktuellen Markers oben im TextBlock angezeigt.

Page 74: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1012

Multimedia17

Anstatt die Marker lediglich zur Information zu nutzen, lassen Sie sich auch zum Navigierenverwenden. Schauen wir uns ein Beispiel an. In Listing 17.12 sind eine ComboBox und einMediaElement definiert.

<ComboBox x:Name="cboMarker"

SelectionChanged="cboMarker_SelectionChanged" .../>

...

<MediaElement x:Name="mediaElement"

Source="thomasOnGuitarWithMarkers.wmv"

MediaOpened="mediaElement_MediaOpened" AutoPlay="False" .../>

Listing 17.12 K17\07 VideoMarker Teil2\MainPage.xaml

Beachten sie, dass auf dem MediaElement in Listing 17.12 ein Eventhandler für das Media-Opened-Event definiert ist, auf der ComboBox ein Eventhandler für das SelectionChanged-Event. Listing 17.13 zeigt die beiden Eventhandler in der Codebehind-Datei.

Im MediaOpened-Eventhandler wird die Markers-Property (Typ: TimelineMarkerCollection)in einer foreach-Schleife durchlaufen. Für jeden darin enthaltenen TimelineMarker wird einComboBoxItem erzeugt und zur ComboBox hinzugefügt. Der TimelineMarker wird in derTag-Property gespeichert und die Content-Property des ComboBoxItems zum Anzeigen vonText und Time verwendet.

Im SelectionChanged-Eventhandler der ComboBox wird aus der Tag-Property des selektier-ten ComboBoxItems die TimelineMarker-Instanz ausgelesen. Der Position-Property desMediaElements wird der Wert der Time-Property zugewiesen und anschließend die Play-Methode aufgerufen.

public partial class MainPage : UserControl

{

...

private void mediaElement_MediaOpened(object sender,

RoutedEventArgs e)

{

foreach (TimelineMarker marker in mediaElement.Markers)

{

ComboBoxItem item = new ComboBoxItem();

item.Tag = marker;

item.Content = string.Format("{0} ({1})",

marker.Text, marker.Time);

Hinweis

Die Markers-Property eines MediaElements ist natürlich erst gefüllt, wenn die Videodatei geladenwurde. Greifen Sie somit frühestens im MediaOpened-Event darauf zu.

Page 75: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1013

Audio und Video 17.1

cboMarker.Items.Add(item);

}

}

private void cboMarker_SelectionChanged(object sender,

SelectionChangedEventArgs e)

{

ComboBoxItem item = cboMarker.SelectedItem as ComboBoxItem;

TimelineMarker marker = item.Tag as TimelineMarker;

mediaElement.Position = marker.Time;

mediaElement.Play();

}

}

Listing 17.13 K17\07 VideoMarker Teil2\MainPage.xaml.cs

Abbildung 17.4 zeigt die Anwendung in Aktion. Aus der ComboBox lässt sich ein Timeline-Marker auswählen, um im Video an eine bestimmte Stelle zu springen.

17.1.7 Den Downloadvorgang darstellen

Haben Sie eine Audio- oder Videodatei in Ihre Assembly oder in die .xap-Datei eingebettet, istsie sofort verfügbar. Laden Sie allerdings eine Datei von einem Webserver herunter, dauertdies eine kleine Zeit. Die Klasse MediaElement besitzt eine DownloadProgress-Property, dieeinen Wert zwischen 0 und 1 zurückgibt. Der Wert 1 bedeutet, es wurden 100 % herunterge-laden. Passend zur Property gibt es das DownloadProgressChanged-Event, das beim Herunter-laden kontinuierlich ausgelöst wird.

In Listing 17.14 sind ein TextBlock, eine ProgressBar und ein MediaElement definiert. DasMediaElement lädt ein Video von einer fremden Domäne runter und hat einen Eventhandlerfür das DownloadProgressChanged-Event definiert.

Abbildung 17.4 Mit dem TimelineMarker kann zu einer bestimmten Stelle im Video navigiert werden.

Page 76: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1014

Multimedia17

<TextBlock x:Name="txtDownload" .../>

<ProgressBar x:Name="pgbDownload" .../>

<MediaElement x:Name="mediaElement"

Source="http://www.thomasclaudiushuber.com/thomasOnGuitar.wmv"

DownloadProgressChanged="MediaElement_DownloadProgressChanged"

.../>

Listing 17.14 K17\08 DownloadProgress\DerDownload\MainPage.xaml

Listing 17.15 zeigt den Eventhandler. Darin wird auf die DownloadProgress-Property desMediaElements zugegriffen, um den Wert des TextBlocks und der ProgressBar zu aktualisie-ren.

private void MediaElement_DownloadProgressChanged(object sender,

RoutedEventArgs e)

{

txtDownload.Text = Math.Round(mediaElement.DownloadProgress

* 100.0, 2) + " %";

pgbDownload.Value = mediaElement.DownloadProgress * 100;

}

Listing 17.15 K17\08 DownloadProgress\DerDownload\MainPage.xaml.cs

Abbildung 17.5 zeigt die Anwendung in Aktion. Beachten Sie, dass das Video bereits abläuft,obwohl erst 23,55 % heruntergeladen wurden. Dies hängt mit dem Buffering zusammen, daswir uns im nächsten Abschnitt ansehen.

Hinweis

Beachten Sie, dass in Listing 17.14 ein Cross-Domain-Zugriff stattfindet. Die Domäne www.tho-masclaudiushuber.com muss somit den Zugriff mit einer Policy-Datei erlauben. Mehr zu Cross-Domain-Zugriffen lesen Sie in Kapitel 13, »Services und Kommunikation«.

Abbildung 17.5 Der Download-Fortschritt wird angezeigt.

Page 77: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1015

Audio und Video 17.1

17.1.8 Buffering im MediaElement

Die MediaElement-Klasse hat eine Property namens BufferingTime vom Typ TimeSpan. Diesebestimmt, wie viel einer herunterzuladenden Videodatei das MediaElement puffert, bevor dieDatei abgespielt wird. Die Property BufferingTime hat als Default-Wert fünf Sekunden. Dasheißt, sobald sich fünf Sekunden einer Videodatei abspielen lassen, wird diese gestartet. Imvorherigen Abschnitt haben wir gesehen, dass das Video schon lief, obwohl der Download-vorgang noch nicht abgeschlossen war.

Wird der Puffer geladen, wird die BufferingProgress-Property des MediaElements aktuali-siert. Diese gibt einen Wert zwischen 0 und 1 zurück. Der Wert 1 bedeutet, es wurden 100 %gepuffert. 100 % bedeutet dabei, die in der BufferingTime-Property angegebene Zeit wurdeheruntergeladen und gepuffert; es wurde noch nicht das ganze Video heruntergeladen.

Passend zur BufferingProgress-Property definiert die MediaElement-Klasse das Buffering-ProgressChanged-Event. Dieses wird ausgelöst, wenn sich die BufferingProgress-Propertyändert.

Listing 17.16 zeigt einen Ausschnitt eines kleinen Beispiels. Beachten Sie, dass auf dem Media-Element ein Eventhandler für das BufferingProgressChanged-Event installiert ist.

<ProgressBar x:Name="pgbBuffer" .../>

<TextBlock x:Name="txtBuffer" .../>

<MediaElement x:Name="mediaElement"

Source="http://www.thomasclaudiushuber.com/thomasOnGuitar.wmv"

BufferingProgressChanged="mediaElement_BufferingProgressChanged"

.../>

Listing 17.16 K17\09 Buffering\DasBuffering\MainPage.xaml

Listing 17.17 zeigt den Eventhandler in der Codebehind-Datei. Darin werden der TextBlockund die ProgressBar aktualisiert.

private void mediaElement_BufferingProgressChanged(object sender,

RoutedEventArgs e)

{

txtBuffer.Text = Math.Round(mediaElement.BufferingProgress

* 100.0, 2) + " %";

pgbBuffer.Value = mediaElement.DownloadProgress * 100;

}

Listing 17.17 K17\09 Buffering\DasBuffering\MainPage.xaml.cs

Zum Test wurde in die Anwendung zusätzlich der im vorherigen Abschnitt integrierte Down-loadfortschritt eingebaut. Abbildung 17.6 zeigt die beiden Ladebalken. Es wurden 6,07 % her-untergeladen, was bereits 54,4 % Puffer entspricht. Das Video wird allerdings noch nichtabgespielt, da keine fünf Sekunden (100 %) gepuffert sind.

Page 78: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1016

Multimedia17

In Abbildung 17.7 ist die in der BufferingTime-Property angegebene Default-Zeit von fünfSekunden gepuffert, womit der Puffer 100 % beträgt. Das Video wird somit abgespielt,obwohl erst 25,78 % des Videos heruntergeladen wurden.

17.1.9 Wiedergabelisten abspielen

Manchmal reicht das Abspielen einer einzigen Videodatei nicht aus, stattdessen müssen meh-rere Dateien hintereinander abgespielt werden. Silverlight unterstützt für solche Szenarienzwei Arten von Wiedergabelisten:

� Advanced Stream Redirector (ASX) – eine XML-Datei mit der Endung .asx. Die Datei ver-weist auf eine oder mehrere Videodateien.

� Server Side Playlists (WSX) – eine XML-Datei mit der Endung .wsx. Die Datei verweist aufeine oder mehrere Videodateien. Im Gegensatz zur .asx-Datei setzt die .wsx-Datei einenWindows Media Server voraus, ansonsten kann sie nicht verwendet werden.

Eine .asx-Datei wird clientseitig vom MediaElement verarbeitet. Sie können die Datei zwar aufdem Server ablegen, aber die Verarbeitung und das Laden der einzelnen Videos finden immerclientseitig statt. Aus diesem Grund wird diese Art auch als clientseitige Wiedergabelistebezeichnet.

Eine .wsx-Datei setzt einen Windows Media Server voraus. Dieser kann basierend auf der.wsx-Datei mehrere Videos in einem einzigen Stream an den Client senden. Die .wsx-Dateiwird folglich auf dem Server verarbeitet. Es wird somit im Zusammenhang mit diesen Wieder-gabelisten auch von serverseitigen Wiedergabelisten gesprochen.

Abbildung 17.6 Solange nicht 100 % gepuffert wurden, wird kein Video abgespielt.

Abbildung 17.7 Die 100 % wurden gepuffert, das Video wird abgespielt.

Page 79: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1017

Audio und Video 17.1

Schauen wir uns beide Arten kurz an, und beginnen wir dabei mit den ASX-Listen. Listing17.18 zeigt eine gültige .asx-Datei. Dabei repräsentiert jedes entry-Element einen Eintrag inder Wiedergabeliste.

<asx version="3.0">

<title>Thomas Videos</title>

<entry>

<title>Thomas beim Boarden</title>

<author>Thomas Claudius Huber</author>

<copyright>(c) T.C.H</copyright>

<ref href="thomasOnBoard.wmv"/>

</entry>

<entry>

<title>Thomas beim Jammen</title>

<author>Thomas Claudius Huber</author>

<copyright>(c) T.C.H</copyright>

<ref href="thomasOnGuitar.wmv"/>

</entry>

</asx>

Listing 17.18 K17\10 Wiedergabelisten\ThomasVideos.asx

Die .asx-Datei und die Videos können auf dem Server bereitgestellt oder beispielsweise auchals Ressource in die Assembly eingebettet werden. Im MediaElement referenzieren Sie die.asx-Datei, als ob es eine Audio- oder Videodatei wäre:

<MediaElement Source="ThomasVideos.asx"/>

Neben den .asx-Dateien unterstützt Silverlight auch die serverseitigen Wiedergabelisten mit.wsx-Dateien. Diese müssen allerdings von einem Windows Media Server (beispielsweiseWindows Server 2003 oder Windows Server 2008) bereitgestellt werden. Dazu veröffent-lichen Sie eine .wsx-Datei auf dem Windows Media Server, wodurch ein sogenannter Pub-lishing Point definiert wird. Das ist eine URL, die sich im MediaElement verwenden lässt.

Achtung

Silverlight unterstützt nur eine Untermenge des ASX-Formates. Für eine vollständige Liste der nichtunterstützten Features sollten Sie einen Blick in die Silverlight-Dokumentation werfen.

Hinweis

Eine .asx-Datei lässt sich auch einfach doppelklicken. Dann wird die Wiedergabeliste im WindowsMedia Player geöffnet, der dieses Format natürlich auch kennt und die Videos somit abspielt.

Page 80: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1018

Multimedia17

Veröffentlichen Sie auf dem Windows Media Server beispielsweise die Datei thomas-Videos.wsx, ist die darin definierte Wiedergabeliste vielleicht unter folgender URL zu finden:

mms://MeinMediaServer:8081/thomasVideos

In einem MediaElement lässt sich die Source-Property dann einfach auf die vom WindowsMedia Server bereitgestellte URL setzen:

<MediaElement

Source=" mms://MeinMediaServer:8081/thomasVideos"/>

Inhaltlich basiert eine .wsx-Datei auch auf XML. Folgend eine einfache Definition mit einerSequenz bestehend aus zwei Videos:

<?wsx version="1.0"?>

<smil>

<seq id="thomasVideoSeq">

<media id="intro" src="thomasOnBoard.wmv"/>

<media id="guitarSolo" src="thomasOnGuitar.wmv"/>

</seq>

</smil>

17.1.10 Weitere Audio/Video-Features

Neben den hier gezeigten Features für Audio und Video geht Silverlight noch viel weiter. FallsSie mit Videos arbeiten, werfen Sie unbedingt einen Blick auf das Programm MicrosoftExpression Encoder. Darin lassen sich Videos bearbeiten und in einem von Silverlight unter-stützten Format exportieren.

Silverlight unterstützt auch das sogenannte Smooth Streaming. Das ist eine für den IIS (Inter-net Information Server) verfügbare Erweiterung, die Sie unter www.iis.net/extensions/SmoothStreaming herunterladen können. Smooth Streaming schaltet dynamisch zwischenverschiedenen Kodierungen eines Videos basierend auf der festgestellten Bandbreite desanfragenden Clients hin und her. Dadurch kann ein Video unabhängig von der Bandbreiteeines Clients flüssig ablaufen. Technisch funktioniert es wie folgt: Smooth Streaming sendeteine niedrige Qualität des Videos an den Client, wodurch die Wiedergabe schon beginnt. ImHintergrund wird das Video mit der nächsthöheren Qualität zwischengespeichert. Ist diesesverfügbar, wird es abgespielt und im Hintergrund wieder das Video mit der nächsthöherenQualität zwischengespeichert. Dieser Vorgang dauert so lange, bis die Bandbreite des Clients

Hinweis

Das WSX-Format besitzt Attribute, die von Silverlight nicht unterstützt werden. Eine genau Auflis-tung dieser Attribute finden Sie in der Silverlight-Dokumentation oder direkt unter folgendemLink: http://msdn.microsoft.com/de-de/library/cc645037(VS.95).aspx.

Page 81: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1019

Webcam und Mikrofon 17.2

die nächsthöhere Kodierung eines Videos nicht mehr unterstützt. Mit dieser Funktionalitätkönnen nun Clients mit schlechter und besserer Verbindung Videos flüssig anschauen. Dabeihaben die Videos eben eine unterschiedliche Qualität.

Um ein Video für Smooth Streaming zu verwenden, muss es natürlich in verschiedenen Qua-litätsstufen kodiert werden. Auch dafür finden Sie in Expression Encoder die entsprechendenFunktionen.

In Silverlight ebenfalls stark ist das Digital Rights Management (DRM). Damit lassen sichVideoinhalte vor ungewünschter Nutzung schützen. Reichlich Informationen dazu finden Sieebenfalls in der Silverlight-Dokumentation.

17.2 Webcam und Mikrofon

Seit Silverlight 4 ist der Zugriff auf die Webcam und das Mikrofon des Benutzers möglich. Indiesem Abschnitt schauen wir uns das an und starten dabei mit dem Zugriff auf die Webcam.

17.2.1 Auf die Webcam des Benutzers zugreifen

Im Folgenden beschäftigen wir uns damit, wie Sie einfach auf die Webcam zugreifen. Dazuentwickeln wir die in Abbildung 17.8 dargestellte Anwendung. Darin lässt sich im oberenBereich aus einer ListBox eine Webcam auswählen. Durch einen Klick auf den Start-Buttonwird das Videosignal der Webcam in der Silverlight-Anwendung angezeigt.

Abbildung 17.8 Eine der beiden Webcams wurde ausgewählt und gestartet.

Page 82: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1020

Multimedia17

Im Namespace System.Windows.Media finden Sie alle notwendigen Klassen, um auf die Web-cam des Benutzers zuzugreifen. Den Start bildet dabei die Klasse CaptureDeviceConfigura-tion. Sie enthält die statische Methode GetAvailableVideoCaptureDevices, die eine Collec-tion von VideoCaptureDevice-Instanzen zurückgibt. Des Weiteren finden Sie in der KlasseCaptureDeviceConfiguration die statische Methode GetDefaultVideoCaptureDevice, diedie zur Default-Webcam gehörende VideoCaptureDevice-Instanz zurückgibt.

Die Default-Webcam und auch das Default-Mikrofon kann ein Benutzer in der Silverlight-Konfiguration festlegen. Dazu muss er einfach in der Silverlight-Anwendung rechtsklickenund über das Kontextmenü die Konfiguration öffnen. Unter dem Tab Webcam/Mikro befin-den sich die Einstellungen, wie Abbildung 17.9 zeigt.

Die Klasse VideoCaptureDevice erbt wie auch die später beschriebene AudioCaptureDevice-Klasse von CaptureDevice. CaptureDevice definiert die Properties FriendlyName und Is-DefaultDevice. Die ListBox in Abbildung 17.8, die die verfügbaren Webcams enthält, ist wiefolgt definiert:

<ListBox x:Name="lsbCams" DisplayMemberPath="FriendlyName" .../>

Im Loaded-Eventhandler der MainPage wird die ListBox mit den verfügbaren VideoCapture-Device-Instanzen gefüllt, wie Listing 17.19 zeigt:

Abbildung 17.9 Default-Webcam und -Mikrofon in der Silverlight-Konfiguration

Page 83: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1021

Webcam und Mikrofon 17.2

private void UserControl_Loaded(object sender, RoutedEventArgs e)

{

lsbCams.ItemsSource =

CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();

...

}

Listing 17.19 K17\11 Webcam\MainPage.xaml.cs

Um ein Video von einer VideoCaptureDevice-Instanz abzuspielen, benötigen Sie eine Instanzder Klasse CaptureSource. Diese nimmt die VideoCaptureDevice-Instanz in der PropertyVideoCaptureDevice entgegen. Sie besitzt Methoden wie Start und Stop, um den Zugriff aufdie Webcam zu starten. Bevor Sie die Start-Methode aufrufen, müssen Sie den Benutzer umErlaubnis fragen. Dies machen Sie mit der statischen Methode RequestDeviceAccess derKlasse CaptureDeviceConfiguration. Diese zeigt dem Benutzer einen Dialog an, in dem erden Zugriff erlauben oder verweigern kann. Den Dialog sehen Sie in Abbildung 17.10. DieMethode RequestDeviceAccess gibt je nach Auswahl des Benutzers true oder false zurück.

Der Benutzer kann seine Eingabe im Dialog in Abbildung 17.10 speichern. Ist der Zugriffdurch eine bereits getätigte und gespeicherte Eingabe erlaubt, hat die statische PropertyAllowedDeviceAccess der Klasse CaptureDeviceConfiguration den Wert true. Prüfen Siesomit immer diese Property, bevor Sie die Methode RequestDeviceAccess aufrufen.

Abbildung 17.10 Der Dialog, der beim Aufruf der RequestDeviceAccess-Methode erscheint

Tipp

Wird in Abbildung 17.10 die Checkbox zum Speichern der Antwort selektiert, ist dieser Eintrag inder Silverlight-Konfiguration sichtbar. Öffnen Sie über das Kontextmenü Ihrer Silverlight-Anwen-dung die in Abbildung 17.9 dargestellte Silverlight-Konfiguration, finden Sie die gespeicherten Ein-träge unter dem Tab Berechtigungen.

Page 84: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1022

Multimedia17

Die CaptureSource-Instanz erbt direkt von DependencyObject und kann sich somit nichtselbst darstellen. Zum Darstellen verwenden Sie einen VideoBrush. Dieser besitzt eine Set-Source-Methode, die eine CaptureSource-Instanz entgegennimmt. Den VideoBrush könnenSie anschließend an diversen Stellen einsetzen, beispielsweise für die Fill-Property einesRectangles, um darauf den von der Webcam stammenden Inhalt darzustellen. Genauso wirdes auch in der Anwendung aus Abbildung 17.8 gemacht. Die Oberfläche enthält ein Rectangle,auf dem der Inhalt der Webcam abgespielt wird:

<Rectangle x:Name="rectWebcam" Width="320" Height="240"/>

Listing 17.20 zeigt die Codebehind-Datei. Im Loaded-Eventhandler wird die Klassenvariable_captureSource mit einer neuen CaptureSource-Instanz initialisiert. Im Click-Eventhandlerdes Start-Buttons wird auf der CaptureSource die Stop-Methode aufgerufen, falls bereits einWebcam-Zugriff durch einen vorherigen Klick des Start-Buttons lief. Anschließend wirdgeprüft, ob in der ListBox eine VideoCaptureDevice-Instanz ausgewählt ist. Diese wird derVideoCaptureDevice-Property der CaptureSource-Instanz zugewiesen. Es wird ein Video-Brush erstellt, an dessen SetSource-Methode die CaptureSource-Instanz übergeben wird. DerVideoBrush wird der Fill-Property des Rectangles zugewiesen. Im letzten Teil wird mit derMethode RequestDeviceAccess der Zugriff angefragt. Beachten Sie, wie in der if-Anweisungzuerst die Property AllowedDeviceAccess geprüft wird. Ist diese true, muss die MethodeRequestDeviceAccess natürlich nicht mehr aufgerufen werden. Hat der Benutzer den Zugrifferlaubt, wird auf der CaptureSource-Instanz die Start-Methode aufgerufen, womit das Videoauf dem Rectangle wie in Abbildung 17.8 abgespielt wird.

public partial class MainPage : UserControl

{

private CaptureSource _captureSource;

...

void UserControl_Loaded(object sender, RoutedEventArgs e)

{

// Die ListBox mit den verfügbaren Videoquellen befüllen.

lsbCams.ItemsSource =

CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();

// CaptureSource-Instanz initialisieren

_captureSource = new CaptureSource();

...

}

Hinweis

Die RequestDeviceAccess-Methode muss in einem vom Benutzer initiierten Event aufgerufenwerden, beispielsweise im Click-Eventhandler eines Buttons. Ist dies nicht so, erhalten Sie keineException. Stattdessen wird dem Benutzer einfach kein Zugriffsdialog angezeigt und der Zugriff ver-weigert.

Page 85: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1023

Webcam und Mikrofon 17.2

void ButtonStart_Click(object sender, RoutedEventArgs e)

{

// Einen eventuellen Webcam-Zugriff stoppen.

_captureSource.Stop();

// Die ausgewählte "Webcam" speichern.

VideoCaptureDevice videoCaptureDevice = lsbCams.SelectedItem

as VideoCaptureDevice;

if(videoCaptureDevice==null)

{

MessageBox.Show("Bitte wählen Sie eine Ihrer Webcams aus");

return;

}

// das ausgewählte VideoCaptureDevice setzen.

_captureSource.VideoCaptureDevice = videoCaptureDevice;

// VideoBrush mit der CaptureSource erstellen.

VideoBrush videoBrush = new VideoBrush();

videoBrush.SetSource(_captureSource);

// Rectangle mit dem VideoBrush füllen.

rectWebcam.Fill = videoBrush;

// Benutzer um Erlaubnis bitten und Zugriff starten.

if (CaptureDeviceConfiguration.AllowedDeviceAccess ||

CaptureDeviceConfiguration.RequestDeviceAccess())

{

_captureSource.Start();

}

}

...

}

Listing 17.20 K17\11 Webcam\MainPage.xaml.cs

17.2.2 Mit der Webcam ein Bild knipsen

Die Klasse CaptureSource besitzt die Methode CaptureImageAsync, mit der Sie via Webcamein Bild knipsen können. Behandeln Sie das Event CaptureImageCompleted, und greifen Sieüber die Result-Property der CaptureImageCompletedEventArgs auf das erstellte Writeable-Bitmap zu.

Hinweis

Bevor Sie die CaptureImageAsync-Methode aufrufen, muss die CaptureSource natürlich mit derStart-Methode gestartet werden. Ansonsten erhalten Sie eine InvalidOperationException. Obdie CaptureSource-Instanz gestartet ist, prüfen Sie mit der State-Property. Diese ist vom Typ derAufzählung CaptureState, die die Werte Started, Stopped und Failed enthält.

Page 86: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1024

Multimedia17

Im Folgenden erweitern wir die Anwendung aus dem vorherigen Abschnitt und bauen eineSnapshot-Funktion ein. Dazu definieren wir in der Oberfläche die in Listing 17.21 dargestellteListBox, in der die Snapshots dargestellt werden.

<ListBox x:Name="lsbSnapshots" Background="Black" ...>

<ListBox.ItemTemplate>

<DataTemplate>

<Image Source="{Binding}" Margin="2"

Width="50" Height="50"/>

</DataTemplate>

</ListBox.ItemTemplate>

<ListBox.ItemsPanel>

<ItemsPanelTemplate>

<StackPanel Orientation="Horizontal"/>

</ItemsPanelTemplate>

</ListBox.ItemsPanel>

</ListBox>

Listing 17.21 K17\11 Webcam\MainPage.xaml

Listing 17.22 zeigt die Codebehind-Datei. Sie enthält eine Klassenvariable _snapShots vomTyp ObservableCollection<WriteableBitmap>. Diese Collection wird im Loaded-Eventhand-ler initialisiert und der ItemsSource-Property der ListBox aus Listing 17.21 zugewiesen. Aufder CaptureSource-Instanz wird ein Eventhandler (via Lambda-Expression) für das Capture-ImageCompleted-Event definiert. Darin wird das in der Result-Property der CaptureImage-CompletedEventArgs steckende WriteableBitmap zur _snapShots-Collection hinzugefügt. Deruntere Teil zeigt den Click-Eventhandler des Snapshot-Buttons, der auf der CaptureSource-Instanz die CaptureImageAsync-Methode aufruft. Beachten Sie, wie vor dem Aufruf der Cap-tureImageAsync-Methode geprüft wird, ob die CaptureSource-Instanz gestartet ist.

public partial class MainPage : UserControl

{

private CaptureSource _captureSource;

private ObservableCollection<WriteableBitmap> _snapShots;

...

void UserControl_Loaded(object sender, RoutedEventArgs e)

{

...

_snapShots = new ObservableCollection<WriteableBitmap>();

// Collection mit Bildern der ListBox zuweisen.

lsbSnapshots.ItemsSource = _snapShots;

// Eventhander für das "Schießen" eines Bildes festlegen

_captureSource.CaptureImageCompleted += ((s, args) =>

{

_snapShots.Add(args.Result);

Page 87: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1025

Webcam und Mikrofon 17.2

});

}

...

void ButtonSnapshot_Click(object sender, RoutedEventArgs e)

{

if (_captureSource.State != CaptureState.Started)

{

MessageBox.Show("Bitte erst den Zugriff auf "

+ "die Webcam starten!");

return;

}

_captureSource.CaptureImageAsync();

}

}

Listing 17.22 K17\11 Webcam\MainPage.xaml.cs

Abbildung 17.11 zeigt die Anwendung in Aktion. In der ListBox unterhalb der Webcam wer-den die geknipsten Bilder angezeigt.

Abbildung 17.11 Die Snapshots werden in der unteren ListBox angezeigt.

Tipp

Die WriteableBitmap-Instanzen, die Sie im CaptureImageCompleted-Event über die EventArgserhalten, lassen sich nicht ohne weiteres als Bilddatei abspeichern. In Kapitel 15, »2D-Grafik«, fin-den Sie im Zusammenhang mit der WriteableBitmap-Klasse ein Beispiel, das mit der Open-Source-Library FJCore das Abspeichern einer WriteableBitmap-Instanz als .jpg-Datei ermöglicht.

Page 88: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1026

Multimedia17

17.2.3 Rohdaten mit VideoSink verarbeiten

Silverlight besitzt keine Out-of-the-Box-Unterstützung, um Videos von der Webcam aufzuneh-men. Allerdings haben Sie mit der Klasse VideoSink die Möglichkeit, auf die Rohdaten derWebcam zuzugreifen. Diese Rohdaten können Sie auf eigene Faust verarbeiten, um sie bei-spielsweise in eine .avi-Datei zu konvertieren.

Die Klasse VideoSink selbst ist abstrakt. Erstellen Sie eine Subklasse, und implementieren Siedie abstrakten Methoden OnCaptureStarted, OnCaptureStopped, OnFormatChanged undOnSample. Die OnSample-Methode wird immer aufgerufen, wenn die Webcam ein Bild liefert.Darin lassen sich die Daten verarbeiten. Listing 17.23 zeigt das Grundgerüst einer Subklassevon VideoSink.

public class MyVideoSink : VideoSink

{

private VideoFormat _videoFormat;

// Initialisieren Sie hier gegebenenfalls einen Container

// für die Rohdaten, üblicherweise einen Stream.

protected override void OnCaptureStarted() { }

// Räumen Sie hier auf und schließen Sie den Stream ab.

protected override void OnCaptureStopped() { }

// Wird aufgerufen, wenn sich das Videoformat geändert hat.

protected override void OnFormatChange(VideoFormat videoFormat)

{

_videoFormat = videoFormat;

}

// Wird jedes Mal aufgerufen, wenn die Webcam ein

// komplettes Bild liefert.

protected override void OnSample(

long sampleTimeInHundredNanoseconds,

long frameDurationInHundredNanoseconds, byte[] sampleData)

{

// Verarbeiten Sie hier den Snapshot. Der Parameter

// sampleData enthält das byte[]-Array mit dem Snaphot

// basierend auf dem in der OnFormatChange-Methode erhaltenen

// VideoFormat

ProcessData(sampleData, _videoFormat);

}

}

Listing 17.23 Eine Beispielimplementierung von VideoSink

Um die in Listing 17.23 dargestellte MyVideoSink-Klasse mit einer CaptureSource-Instanz zuverbinden, nutzen Sie die aus VideoSink geerbte CaptureSource-Property:

var videoSink = new MyVideoSink{ CaptureSource = _captureSource};

Page 89: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1027

Webcam und Mikrofon 17.2

Sobald auf der CaptureSource die Start-Methode aufgerufen wird, wird nun die MyVideo-Sink-Instanz aktiv, und ihre überschriebenen Methoden werden verwendet.

17.2.4 Auf das Mikrofon des Benutzers zugreifen

Der Zugriff auf das Mikrofon des Benutzers gestaltet sich auf dieselbe Weise wie der Zugriffauf die Webcam. Die Klasse CaptureDeviceConfiguration besitzt die beiden statischenMethoden GetAvailableAudioCaptureDevices und GetDefaultAudioCaptureDevice. Dieerste gibt eine Collection mit AudioCaptureDevice-Instanzen zurück, die zweite lediglich diezum Default-Mikrofon gehörende AudioCaptureDevice-Instanz.

Um eine Aufnahme zu starten, ist auch hier eine CaptureSource-Instanz notwendig. WeisenSie der AudioCaptureDevice-Property Ihre AudioCaptureDevice-Instanz zu. Zum Startenrufen Sie auf der CaptureSource-Instanz die Start-Methode auf. Vergessen Sie aber nicht,den Benutzer zuvor mit der statischen RequestDeviceAccess-Methode der CaptureDevice-Configuration-Klasse um Erlaubnis zu fragen.

Haben Sie die CaptureSource gestartet, fragen Sie sich bestimmt: »Und jetzt?« Nichts passiert.Sie müssen die Audiodaten selbst verarbeiten, falls Sie auf diese zugreifen möchten. Dazuerstellen Sie eine Subklasse von AudioSink. Implementieren Sie die abstrakten Methoden,und weisen Sie der CaptureSource-Property einer Instanz Ihrer AudioSink-Subklasse die Cap-tureSource-Instanz zu. Dadurch werden die Methoden in Ihrer AudioSink-Subklasse aufgeru-fen, und Sie können beispielsweise etwas aufnehmen. Schauen wir uns ein Beispiel an.

In Listing 17.24 wird die StreamAudioSink-Klasse erstellt, die von AudioSink erbt. Neben denüberschriebenen Methoden werden die Properties Stream und Format implementiert. DerStream-Property wird in der Methode OnCaptureStarted ein neuer MemoryStream zugewie-sen. In der Methode OnFormatChange wird das AudioFormat in der Format-Property gespei-chert. In der Methode OnSamples werden die erhaltenen Rohdaten in den MemoryStreamgeschrieben.

public class StreamAudioSink : AudioSink

{

public Stream Stream { get; private set; }

public AudioFormat Format { get; private set; }

protected override void OnCaptureStarted()

Tipp

Für einfache Szenarien lässt sich auch die CaptureImageAsync-Methode der CaptureSource-Klasse mehrmals mit einem DispatcherTimer aufrufen, um so beispielsweise pro Sekunde 20 Bilderzu erhalten.

Wie oft die OnSample-Methode einer VideoSink-Subklasse aufgerufen wird, ist in der VideoFor-mat-Instanz definiert. Die Property FramesPerSecond gibt die Bilder pro Sekunde zurück.

Page 90: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1028

Multimedia17

{

Stream = new MemoryStream();

}

protected override void OnCaptureStopped(){ }

protected override void OnFormatChange(AudioFormat audioFormat)

{

Format = audioFormat;

}

protected override void OnSamples(long sampleTime,

long sampleDuration, byte[] sampleData)

{

Stream.Write(sampleData, 0, sampleData.Length);

}

}

Listing 17.24 K17\12 Mikrofon\StreamAudioSink.cs

In der MainPage des hier verwendeten Beispiels sind zwei Klassenvariablen vom Typ Cap-tureSource und StreamAudioSink definiert, wie Listing 17.25 zeigt. Die Variablen werden imLoaded-Eventhandler initialisiert. Beachten Sie dabei, dass der CaptureSource-Property derStreamAudioSink-Instanz die CaptureSource-Instanz zugewiesen wird.

public partial class MainPage : UserControl

{

private CaptureSource _captureSource;

private StreamAudioSink _audioSink;

...

void UserControl_Loaded(object sender, RoutedEventArgs e)

{

lsbMicros.ItemsSource =

CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices();

_captureSource = new CaptureSource();

_audioSink = new StreamAudioSink { CaptureSource = _captureSource };

}

...

}

Listing 17.25 K17\12 Mikrofon\MainPage.xaml.cs

Wie Listing 17.25 im Loaded-Eventhandler auch zeigt, wird eine ListBox mit den verfügbarenAudioquellen abgefüllt. Neben dieser ListBox befinden sich in der Oberfläche lediglich zweiButtons zum Aufnehmen und Stoppen. Listing 17.26 zeigt die beiden Eventhandler derButtons. Im Eventhandler ButtonRecord_Click wird das in der ListBox selektierte Audio-CaptureDevice gespeichert und der AudioCaptureDevice-Property der CaptureSource-

Page 91: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1029

Webcam und Mikrofon 17.2

Instanz zugewiesen. Nach der Prüfung des Zugriffs wird auf der CaptureSource-Instanz dieStart-Methode aufgerufen.

Im Eventhandler ButtonStop_Click wird auf der CaptureSource-Instanz die Stop-Methodeaufgerufen. Der Stream der StreamAudioSink-Instanz wird in einer lokalen Variablen raw-Stream gespeichert. Es wird ein SaveFileDialog erstellt und angezeigt. Hat der Benutzer denSaveFileDialog bestätigt, wird der aufgenommene Audio-Stream mit der Klasse WavHelper ineinen WAV-Stream umgewandelt und die Datei als .wav-Datei gespeichert.

public partial class MainPage : UserControl

{

...

void ButtonRecord_Click(object sender, RoutedEventArgs e)

{

// Das ausgewählte "Mikro" speichern.

AudioCaptureDevice audioCaptureDevice =

lsbMicros.SelectedItem as AudioCaptureDevice;

if (audioCaptureDevice == null)

{

MessageBox.Show("Bitte wählen Sie eines Ihrer Mikros aus");

return;

}

_captureSource.AudioCaptureDevice = audioCaptureDevice;

if (CaptureDeviceConfiguration.AllowedDeviceAccess ||

CaptureDeviceConfiguration.RequestDeviceAccess())

{

_captureSource.Start();

btnRecord.IsEnabled = false;

btnStop.IsEnabled = true;

}

}

private void ButtonStop_Click(object sender, RoutedEventArgs e)

{

_captureSource.Stop();

btnRecord.IsEnabled = true;

btnStop.IsEnabled = false;

Stream rawStream = _audioSink.Stream;

SaveFileDialog dlg = new SaveFileDialog();

dlg.Filter = "Wav (*.wav)|*.wav";

if (dlg.ShowDialog() == true)

{

using (Stream wavStream = dlg.OpenFile())

{

WavHelper.WriteRawToPCMWav(rawStream, _audioSink.Format,

wavStream);

Page 92: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1030

Multimedia17

}

}

}

}

Listing 17.26 K17\12 Mikrofon\MainPage.xaml.cs

Abbildung 17.12 zeigt die Anwendung. Es wurde bereits etwas aufgezeichnet und jetzt aufden Stop-Button geklickt. Der SaveFileDialog wird angezeigt und erlaubt das Abspeichern deraufgenommenen Datei.

17.3 Deep Zoom

In Kapitel 1, »Einführung in Silverlight«, haben wir bereits einen kleinen Blick auf die Anwen-dung http://memorabilia.hardrock.com mit Bildern von Hard-Rock-Cafe-Souvenirs geworfen.In die Bilder kann hineingezoomt werden. Sie können in eigenen Silverlight-Anwendungen

Hinweis

.wav-Dateien sind eine Art Container-Format. Sie besitzen einen Header und enthalten dann dieRohdaten. Sie sind relativ einfach manuell zu schreiben. Dies wurde in Listing 17.26 in der KlasseWavHelper gekapselt. Werfen Sie in den Beispielen einen Blick in die Klasse, um zu sehen, wie dasWAV-Format tickt. Eine gute Seite zum WAV-Format finden Sie unter anderem bei Wikipedia:http://de.wikipedia.org/wiki/RIFF_WAVE.

Abbildung 17.12 Die aufgenommene Datei lässt sich im WAV-Format speichern.

Page 93: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1031

Deep Zoom 17.3

auch die Deep-Zoom-Technologie einsetzen. Die Idee ist dabei, eine zoombare Oberfläche fürsehr große Bilder zu definieren. Meist werden Bilder verwendet, deren native Auflösung grö-ßer als die des Bildschirms ist. Die Bilder liegen dabei in unterschiedlichen Auflösungen vor,so dass der Benutzer tatsächlich nur beim Zoomen weitere Daten laden muss.

Um eine Deep-Zoom-Anwendung zu erstellen, benötigen Sie neben Visual Studio ein weiteresProgramm namens Deep Zoom Composer. Das Programm ist frei verfügbar und kann unterfolgendem Link heruntergeladen werden: http://go.microsoft.com/fwlink/?LinkID=157112.

Wir schauen uns im Folgenden an, wie Sie im Deep Zoom Composer eine Bildersammlungerstellen und wie Sie diese Bildersammlung in Silverlight verwenden.

17.3.1 Bildersammlung im Deep Zoom Composer erstellen

Starten Sie den Deep Zoom Composer, und legen Sie ein neues Projekt an. Das Vorgehenbesteht dann aus drei Arbeitsschritten:

1. Bilder importieren

2. Bilder zusammensetzen (Compose)

3. Bilder exportieren

Abbildung 17.13 zeigt den Deep Zoom Composer. Es wurden zwei Bilder importiert. Bilderlassen sich über den Add Image...-Button oder direkt per Drag & Drop aus dem WindowsExplorer importieren.

Beachten Sie in Abbildung 17.13, wie Sie im oberen Bereich mit den Buttons Import, Com-

pose und Export die drei Arbeitsschritte erkennen können.

Nachdem die Bilder importiert wurden, fügen Sie sie entsprechend zusammen. Dazu klickenSie im oberen Bereich auf den Button Compose. In der Compose-Ansicht lassen sich die Bilderaus der am unteren Bildrand befindlichen Leiste in die Designfläche ziehen. In Abbildung17.14 wurde das zweite Bild stark verkleinert in die auf dem ersten Bild sichtbare Pupillegesetzt. Im rechten Bereich der Abbildung sehen Sie, dass wie bei Bildbearbeitungsprogram-men jedes Bild auf einer unterschiedlichen Schicht (Layer) liegt.

Durch einen Klick auf den oberen Button Export wechseln Sie zum dritten Arbeitsschritt, indem Sie das Bild exportieren. Abbildung 17.15 zeigt, dass dann auf der rechten Seite diverseEinstellungen möglich sind. Als Output type ist per Default Silverlight Deep Zoom aus-gewählt. Behalten Sie die Standardeinstellungen bei, und klicken Sie wie in Abbildung 17.15auf den Button Export unten rechts.

Nachdem der Export abgeschlossen ist, erscheint der in Abbildung 17.16 dargestellte Dialog.Dort können Sie durch einen Klick auf Image Folder direkt zum Ausgabeverzeichnisspringen.

Page 94: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1032

Multimedia17

Abbildung 17.13 Es wurden zwei Bilder importiert.

Abbildung 17.14 Das zweite Bild wird verkleinert in die Pupille des ersten gesetzt.

Page 95: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1033

Deep Zoom 17.3

Abbildung 17.17 zeigt die Dateien im Ausgabeverzeichnis. Die einzelnen Ordner können Siebetrachten. Sie werden darin die genutzten Bilder zerlegt in Einzelteile und mit guter undgeringer Auflösung vorfinden.

Damit wäre die Bildersammlung erstellt, und es kann mit dem Silverlight-Projekt weiter-gehen.

Abbildung 17.15 Die erstellte Bildersammlung wird exportiert.

Abbildung 17.16 Ein Klick auf das Icon »Image Folder« öffnet das Ausgabeverzeichnis.

Page 96: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1034

Multimedia17

17.3.2 Die Bildersammlung in Silverlight verwenden

Erstellen Sie eine neue Silverlight-Anwendung mit Webprojekt. Platzieren Sie im ClientBin-Ordner des Webprojekts die Ausgabe des Deep Zoom Composers. Abbildung 17.18 zeigt daserstellte Webprojekt mit der Ausgabe. Beachten Sie, dass Sie von der Ausgabe des Deep ZoomComposers nur die Ordner – mit Inhalt versteht sich – und die Datei dzc_output.xml benöti-gen. Die anderen in Abbildung 17.17 dargestellten Dateien sind nicht notwendig.

In der Silverlight-Anwendung verwenden Sie jetzt ein MultiScaleImage-Element. Setzen Siedie Source-Property des MultiScaleImage-Elements auf die dzc_output.xml-Datei, wie dies inListing 17.27 der Fall ist.

<MultiScaleImage Source="dzc_output.xml"

x:Name="multiScaleImage"/>

Listing 17.27 K17\13 DeepZoom\DeepZoom\MainPage.xaml

Abbildung 17.17 Die Dateien im Ausgabeverzeichnis

Hinweis

Beim Exportieren aus dem Deep Zoom Composer lassen sich in Abbildung 17.15 auch Templatesauswählen, die gleich eine Silverlight-Anwendung enthalten. Allerdings liegen diese Silverlight-Anwendungen nicht in der Version 4.0, sondern in Version 3.0 vor. Diese Anwendungen habenCode, der via JavaScript das MouseWheel-Event zum Zoomen verwendet. In Silverlight 4.0 wurdedas MouseWheel-Event integriert. Somit ist dieser vom Deep Zoom Composer generierte Codenicht mehr ganz aktuell, aber er läuft. Er lässt sich zudem relativ einfach anpassen, damit er dasMouseWheel-Event aus Silverlight 4.0 verwendet.

Sie sollten sich den so generierten Code ansehen, da er einen guten Start bildet und die Logik fürdas Zoomen und Verschieben von Bildern bereits enthält.

Page 97: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1035

Deep Zoom 17.3

Damit wird bereits das Bild angezeigt. Allerdings haben Sie noch keine Zoomfunktionalität.Dazu müssen Sie Eventhandler für Events wie MouseWheel, MouseMove oder MouseLeftBut-tonDown implementieren und darin auf Methoden des MultiScaleImage-Elements wie Zoom-AboutLogicalPoint zugreifen. Die Eventhandler installieren Sie üblicherweise direkt auf derMainPage und nicht auf dem MultiScaleImage-Element. Auf die Details gehe ich an dieserStelle nicht ein, da entsprechender Code auch aus dem Deep Zoom Composer generiert wer-den kann. Oder werfen Sie einen Blick auf die Buch-DVD – im Ordner K17\13 DeepZoom fin-den Sie das hier erstellte Beispiel.

Im Beispiel K17\13 DeepZoom kann mit dem Mausrad gezoomt werden. Abbildung 17.19zeigt die Anwendung beim Start.

Abbildung 17.18 Die Ausgabe des Deep Zoom Composers wurde zum ClientBin-Ordner hinzugefügt.

Abbildung 17.19 Die Anwendung wurde gestartet.

Page 98: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1036

Multimedia17

Wird in Abbildung 17.19 das rechte Auge angeklickt und anschließend das Mausrad gedreht,findet ein Zoomeffekt statt. Wird bis in die Pupille gezoomt, ist dort wie in Abbildung 17.20dargestellt das nächste Bild zu erkennen.

Wird in Abbildung 17.20 weiter in das Bild gezoomt, erscheint das in der Pupille liegende Bildebenfalls gestochen scharf, wie Abbildung 17.21 zeigt.

Abbildung 17.20 Das versteckte Bild in der Pupille

Abbildung 17.21 Das zweite Bild erscheint ebenfalls scharf.

Page 99: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1037

Zusammenfassung 17.4

17.4 Zusammenfassung

Mit der Klasse MediaElement lassen sich Audio- und Videodateien abspielen. Silverlight unter-stützt dabei die gängigsten Formate. Setzen Sie in XAML die Source-Property des MediaEle-ments, um eine Audio- oder Videodatei anzugeben. In C# verwenden Sie die SetSource-Methode, die direkt einen Stream entgegennimmt.

Um den Abspielgang zu steuern, definiert die MediaElement-Klasse die Methoden Play, Pauseund Stop. Mit der Property Position bestimmen Sie die aktuelle Position mit einemTimeSpan-Objekt. Darüber hinaus gibt es Properties wie Volume, Balance und Audio, um dieAudioausgabe zu steuern.

Silverlight bietet auch die Möglichkeit, auf Webcams und Mikrofone des Benutzers zuzugrei-fen. Mit den statischen Methoden der CaptureDeviceConfiguration-Klasse erhalten Sie dieverfügbaren Quellen. Beispielsweise gibt die statische Methode GetAvailableVideoCapture-Devices die verfügbaren Webcams in Form von VideoCaptureDevice-Instanzen zurück.

Um auf eine VideoCaptureDevice- oder AudioCaptureDevice-Instanz zuzugreifen, erzeugenSie eine CaptureSource-Instanz. Setzen Sie auf dieser Instanz entsprechend die VideoCap-tureDevice- und/oder AudioCaptureDevice-Property, und rufen Sie zum Starten des Zugriffsdie Start-Methode auf. Holen Sie allerdings zuvor mit der statischen Methode Request-DeviceAccess der CaptureDeviceConfiguration-Klasse die Erlaubnis des Benutzers ein.

Mit der Deep-Zoom-Funktionalität lassen sich hochauflösende Bilder auch im Web anzeigen.Nutzen Sie den Deep Zoom Composer, um Ihre Bildersammlung zu erstellen. In Silverlightverwenden Sie das MultiScaleImage-Element zum Darstellen.

In diesem Kapitel haben Sie die Multimedia-Funktionalität von Silverlight kennengelernt. Imnächsten Kapitel schauen wir uns die Druckfunktionalität an. Dabei lernen Sie, wie Sie einfa-che Elemente aus Silverlight ausdrucken und wie Sie Listen über mehrere Seiten auf Papierbringen.

Page 100: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

1157

Index

$filter 765&amp 191&apos 191&gt 191&lt 191&quot 191* (Einheit) 329.fx-Datei 937.NET

für Silverlight 48gemeinsame Codebasis 101

.pfx-Datei 1097

.ps-Datei 937

.xap-Datei 79signieren 1097

.zip 838_blank 217_parent 217_self 2172D-Grafik 899

Bitmap 947Brush 923Cached Composition 919Effekt 934Geometry 909in FriendStorageOnline 954Shape 900

3D 315

A

AAC 1002AbsoluteUri 503Accepted (FilterEventArgs) 627AcceptsReturn 253Action 131Action (TouchPoint) 427Action<object> 457ActionCommand 457ActiveX 40ActualHeight 284ActualWidth 284Add (NotifyCollectionChanged-

Action) 614AddHandler 391

AddNew 620AddObject 773Add-on-Assembly 89, 203AddressControl 578AddressConverter 181AddressFamily 849ADO.NET Data Service 755Adobe Flash 41, 708, 993Advanced Audio Coding 1002Advanced Stream Redirector

1016Ajax 38Alias (Namespace) 165AllowDrop 433AllowedDeviceAccess 1021allowHtmlPopupWindow

(object-Tag) 103AllowReadStreamBuffering 815AllowWriteStreamBuffering 815Alpha-Kanal (Color) 924Alt (ModifierKeys) 397AlternatingRowBackground 671Amplitude

EasingMode 987Angle (RotateTransform) 304AngleX (SkewTransform) 306AngleY (SkewTransform) 306Animation 963

Arten 965Basis-Animation 970C# 969Dauer 971Füllverhalten 974Gesamtlänge 974Geschwindigkeit 972in FriendStorageOnline 997in XAML 967Interpolation 965Keyframe-Animation 979Klassenhierarchie 964kontrollieren 975Low-Level 992mehrere mit Storyboard 977rückwärts 973Startzeit 972

Animation (Forts.)wiederholen 973

Anwendungsspeicher 877App.g.cs 117App.xaml 75App.xaml.cs 76AppDomain 83AppendChild (HtmlElement)

1137Apple (ModifierKeys) 397Application (Klasse) 75, 119, 476Application Assembly 80Application Library Caching 135Application Service (ASP.NET)

731application/x-silverlight-2 83ApplicationInitParams 122ApplicationLifetimeObjects 121,

797ApplicationSettings 876Applikation 1071

Business-Anwendung 1115Navigationsanwendung 1107Out of Browser 1081vertrauenswürdige OOB 1096Webanwendung 1072Windows Phone 1117

AppManifest.xaml 79AppManifest.xml 113ArcSegment 913Arrange 283ArrangeOverride 285Arrow (Cursors) 411Ascending (ListSortDirection)

626ASP.NET 41ASP.NET Application Service 731ASP.NET Compatibility Mode

717ASP.NET Webservice 725ASP.NET Websiteverwaltungs-

Tool 731aspnet_Users 732aspNetCompatibilityEnabled 717

Page 101: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1158

AspNetCompatibilityRequire-mentsAttribute 717

ASPNETDB.MDF 732Assembly 79

Add-on-Assembly 89Framework-Assembly 89nachladen 144on Demand 144

AssemblyInfo.cs 113AssemblyPart 80ASX 1016AsyncCallback 767AsyncCompletedEventArgs 816Asynchronous JavaScript and XML

38AsyncState 767Attached Property 370–371

ein Panel mit 374implementieren 371

Attached-PropertySyntax 177

AttachEvent 1138Attributsyntax 172Audio 1001

Abspielen steuern 1005auf Fehler reagieren 1005aufnehmen mit Mikrofon 1027Buffering 1015Datei abspielen 1002Downloadvorgang 1013Formate 1002Wiedergabeliste 1016

AudioCaptureDevice 1020, 1027AudioSink 1027Ausgabekoordinate 938authentication 733Authentication (WebContext)

798AuthenticationBase<T> 796AuthenticationService 734, 799AuthenticationServiceClient 738AuthenticationType 746Authentifizierung

FriendStorageOnline 858mit WCF-RIA-Service 796WCF-Service 731

Auto (DataGridLengthUnitType) 654

Auto (GridUnitType) 328

Auto (ScrollBarVisibility) 232AutoCompleteBox 255AutoCompleteFilterMode 257AutoCompleteFilterPredicate 257AutoGenerateColumns 649AutoGeneratingColumn 650AutoLoad 792Automatic (Duration) 972AutomationFactory 1102AutoPlay 1003AutoReverse (Timeline) 966, 973autoUpgrade (object-Tag) 103AvailableFreeSpace 880availableSize 285

B

BackEase 987Background 206background (object-Tag) 103BackgroundWorker 134Balance (MediaElement) 1006BAML 117BasedOn (Style) 516BaselineOffset 253, 259BasicHttpBinding 717Basis-Animation

Gesamtlänge 974Geschwindigkeit 972rückwärts 973Startzeit 972Übersicht Start-/Zielwert 971wiederholen 973

Basisklasse 91Control 94DependencyObject 92FrameworkElement 93Object 92Panel 94UIElement 93

Begin (Storyboard) 967BeginAcceptTcpClient 845BeginExecute (DataService-

Query<T>) 767BeginGetRequestStream 826BeginGetResponse 826BeginInvoke 131BeginPrint 1043BeginSaveChanges 772

BeginStoryboard 968BeginTime (Timeline) 966, 972Benannter Style 513Benutzereingabe validieren 632Benutzerrolle 742Benutzerverwaltung 732Beschleunigungsfunktion 985Bézierkurve 914BezierSegment 914Bildquelle 947Bin\Debug 78Binäre Ressource 490

aus dem Web herunterladen 500FriendStorageOnline 507in .xap-Datei einbetten 499in Assembly einbetten 491ZIP-Datei entpacken 838

Binary Application Markup Language 117

Binding 185, 188, 596BindingExpression 603BindingHelper 379, 694BindingMode 601BindingOperations 595BindingValidationError 644BindsDirectlyToSource 596Bitmap 947BitmapCache 919BitmapImage 275, 947BitmapSource 947BlackoutDates 266BlackWhiteEffect 942blank 217Block 262BlockCollection 262Blocks (Property) 262BlurEffect 935BlurRadius 936Body (HtmlDocument) 1135Bold 261BoolToBrushConverter 610Border 271BorderBrush 206, 272BorderThickness 206, 272Both (StretchDirection) 273Bottom (VerticalAlignment) 298BounceEase 987Bounces (EasingMode) 987Bounciness 987

Page 102: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1159

Browser 36Browser Host 49Browser HTTP Stack 841BrowserHttp 842BrowserInformation (HtmlPage)

1130–1131BrowserInformation (Klasse)

1130Browser-Plugin 39BrowserVersion (Browser-

Information) 1132Brush 923

GradientBrush 925ImageBrush 930ImplicitInputBrush 934Klasse 923Klassenhierarchie 923LinearGradientBrush 925RadialGradientBrush 927SolidColorBrush 924TileBrush 929VideoBrush 931WebBrowserBrush 932

BrushMappingMode 926Bubble (Routed Event) 386BufferingProgress 1015BufferingProgressChanged 1015BufferingTime 1015Buildvorgang 118

Inhalt 499Keine 501Resource 491

Business Application 1115Button 210–211

CheckBox 213HyperlinkButton 216normaler 211RadioButton 214RepeatButton 211ToggleButton 211

ButtonBase 210, 448By (DoubleAnimation) 970BytesReceived 818

C

Cached Composition 919CacheMode 919CalendarButtonStyle 267

CalendarDayButtonStyle 267CalendarItemStyle 267CalendarSelectionMode 264CalenderMode 266CallbackContract 751Cancel 226CancelAsync 816CancelEdit 620CancelEventArgs 226Cancelled (Property) 816CancelNew 620CanConvertFrom 181CanExecute 448CanExecuteChanged 448CanSeek 1005CanUserReorderColumns 664CanUserResizeColumns 664CanUserSortColumns 664Canvas 321CaptureDevice 1020CaptureDeviceConfiguration

1020CaptureImageAsync 1023CaptureImageCompleted 1023CaptureMouse 210, 403CaptureSource 1021CaptureState 1023Capturing 402CaretBrush 254Cascading Style Sheet 37CellEditingTemplate 655CellStyle (DataGrid) 518, 671CellTemplate 655Center (HorizontalAlignment)

298Center (RadialGradientBrush)

927Center (VerticalAlignment) 298CenterOfRotationX

(PlaneProjection) 316CenterOfRotationY

(PlaneProjection) 316CenterOfRotationZ

(PlaneProjection) 316CenterX (CompositeTransform)

311CenterX (RotateTransform) 304CenterX (ScaleTransform) 305CenterX (SkewTransform) 306

CenterY (CompositeTransform) 311

CenterY (RotateTransform) 304CenterY (ScaleTransform) 305CenterY (SkewTransform) 306ChangeVisualState 565CheckAccess 130CheckAndDownloadUpdate-

Async 125, 1092CheckAndDownloadUpdate-

Completed 126, 1093CheckBox 213Checked (ToggleButton) 213CheckIfUserNameAlreadyExists

854Child (Border) 271Child (Popup) 274Child (Viewbox) 272Children (HtmlElement) 1135,

1138Children (Panel) 286, 321Children (Storyboard) 966Children (TransformGroup) 310ChildWindow 222CircleEase 987Clear (DomainContext) 788ClearValue 369Click (ButtonBase) 210ClickMode (ButtonBase) 210Client HTTP Stack 841clientaccesspolicy.xml 705, 844ClientBin 98, 501ClientHttp 842Clip (UIElement) 297, 918Clipboard 437Close (TcpClient) 847Close (Window) 1091Closed (ChildWindow) 226Closed (MediaElementState)

1005Closed (Popup) 274Closed (ToolTip) 231Closing (ChildWindow) 226Closing (Window) 1091ClosingEventArgs 1091CLR 46CLR-Namespace 159ClrNamespace 160Codebasis, gemeinsame 101

Page 103: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1160

Codebehind-Datei 74Collapsed (TreeViewItem) 238Collapsed (Visibility) 299Collection 614

auf mehrere Seiten 629ausdrucken 1046CollectionView 616filtern 625gruppieren 661sortieren 625XAML 192

CollectionChanged 614CollectionView 616

Arten 618Currency-Management 620filtern 625gruppieren 661in FriendStorageOnline 678Master-Detail mit 622sortieren 625

CollectionViewSource 619COLOR 938Color 924Color (DrawingAttributes) 420ColorAnimation 970Colors 925Column (Grid) 327ColumnDefinition 327ColumnDefinitions (Grid) 327ColumnHeaderStyle 671Columns (DataGrid) 651ColumnSpan (Grid) 327Columntypen 651COM 40, 1102, 1104ComboBox 246COM-Interop 1102

mit cmd (Kommandozeile) 1103mit Excel 1104mit Notepad 1103

Command 447–448Command-Modell von

Silverlight 448implementieren 449in FriendStorageOnline 461

CommandParameter 448CommitEdit 620CommitNew 620Common Language Runtime 46Common Object Model 40, 1102

CommonStates 531Community Technology Preview

1117Compiler-Direktive 101Completed (LoginOperation) 799Completed (Timeline) 966ComponentOne 279CompositeTransform 311CompositionTarget 992ConnectAsync 850ContainsText (Clipboard) 437Content (ContentControl) 208Content (Klasse) 1126Content (NotificationWindow)

1094Content (SilverlightHost) 1126Content Property (XAML) 174ContentControl 208, 235

Button 210ChildWindow 222Label 218ScrollViewer 231sonstige 235ToolTip 229

ContentPresenter 527ContentPropertyAttribute 175ContentTemplate 209, 521Content-Type 706ContentType 825Control 205

aus dem Silverlight Toolkit 276ContentControl 208CustomControl 552Datum-Control 264in FriendStorageOnline 583ItemsControl 235Panel 320Range-Control 268sonstige 271Text-Control 253Übersicht 204UserControl 577

Control (Klasse) 94Control (ModifierKeys) 397Controller (MVC) 451ControlTemplate 209, 525, 573

in Expression Blend 543in Style auslagern 529ItemsControls 528

ControlTemplate (Forts.)Template Parts beachten in 541TemplateBinding vs.

TemplatedParent 613Visual States 531von ContentControls 527

Convert (IValueConverter) 609ConvertBack (IValueConverter)

609Converter (Binding) 596, 609ConverterCulture (Binding) 596,

611ConverterParameter (Binding)

596, 611ConvertFrom 178, 181Cookie 869CookiesEnabled (Browser-

Information) 1132Core-Assembly (Framework-

Assembly) 89CornerRadius 272Create (WebRequest) 826CreateDirectory 873CreateElement 1136CreateFile 873CreateHttp (WebRequest) 826createObject 98CreateObject (AutomationFactory)

1102createObject (JavaScript) 1147CreatorInstance 842Credentials (WebClient) 816crossdomain.xml 708cross-domain-access 706Cross-Domain-Zugriff 700

clientaccesspolicy.xml 705crossdomain.xml 708Einschränkungen 701erkennen 709Varianten 703

CSS 37CssClass (HtmlElement) 1138CTP 1117CubicEase 987Currency-Management 620Current (Application) 76CurrentBookmark 1134CurrentChanged 617CurrentChanging 617

Page 104: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1161

CurrentItem 617, 620CurrentPosition 617CurrentState (MediaElement)

1005CurrentStateChanged 1006Cursor 411Cursors (Klasse) 411CustomControl 552

Aussehen festlegen 562Bibliothek anlegen 553Properties implementieren 561Template Part definieren 557Visual States im Template 568Visual States implementieren

564XmlnsDefinitionAttribute 570

CustomIdentity 746CustomPrincipal 747CustomUserAuthService 810CustomValidationAttribute 642,

667Cycle (KeyboardNavigation-

Mode) 396

D

Data (DragEventArgs) 434Data Binding 594

an .NET Property 606an Collections 614an Dependency Property 606an logische Ressourcen 609an relative Quellen 612an unterschiedliche Typen 609Datenquellen 606Debugging 605in C# 595in XAML 594Master-Detail 622Property-Pfad 599Quelle 597Richtung 601Übersicht 66und DataContext 598validieren 632

Data Paging 629, 794DataContext 598DataContractJsonSerializer 833DataFormats 434

DataGrid 647ausdrucken 1049Auswahl 662Bearbeiten von Daten 664Column erstellen 652Column-Breite 654Columns generieren 649Column-Typen 651ComboBox-Spalte 657Datum-Spalte 656gruppieren 661RowDetails 660Zeilen validieren 667Zellen validieren 664

DataGridAutoGenerating-ColumnEventArgs 650

DataGridBoundColumn 652DataGridCheckBoxColumn 651DataGridGridLinesVisibility 671DataGridHeadersVisibility 671DataGridLength 654DataGridLengthUnitType 654DataGridRowDetailsVisibility-

Mode 660DataGridSelectionMode 662DataGridTemplateColumn 652,

655DataGridTextColumn 651DataItem (BindingExpression)

604DataMember 726DataPager 629, 794DataService<T> 763DataServiceConfiguration 763DataServiceContext 773DataServiceQuery<T> 767DataTemplate 521, 655, 672Datei, lokale 1100Daten 593

Collection 614Data Binding 594DataGrid 647Datenquellen 606filtern 625gruppieren 661in FriendStorageOnline 677lokal im Isolated Storage

speichern 869Master-Detail 622

Daten (Forts.)mit DataTemplate visualisieren

672sortieren 625validieren 632

DatePicker 267DatePickerFormat 268DatePickerTextBox 267Datum-Control 264

Calendar 264DatePicker 267

DayOfWeek 266Decade (CalendarMode) 266Deep Zoom 1030

Bildersammlung erstellen 1031in Silverlight verwenden 1034

Deep Zoom Composer 1031Default (UpdateSourceTrigger)

602DefaultExt (SaveFileDialog) 1076Default-Konstruktor 158Default-Namespace 165Default-Property (XAML) 174Default-Style 555DefaultStyleKey 556Dekompilieren 86Delay (RepeatButton) 211DeleteDirectory 873DeleteFile 873DeleteObject 773Delta (MouseWheelEventArgs)

410Denial of Service 701Dependency Property 359

Attached Property 370FriendStorageOnline 377implementieren 364in Silverlight-Klassen 370lokalen Wert löschen 369Metadaten 367Möglichkeiten 364Übersicht 60Vorrangsrecht 362vs. klassische .NET Property 364

DependencyObject 92, 360DependencyProperty 360DependencyPropertyChanged-

EventArgs 368Deployment 80, 85, 1088

Page 105: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1162

Descending (ListSortDirection) 626

Designer 154DesignHeight 165DesignWidth 165DesiredSize 283DetachEvent 1138DevExpress 279DeviceType 422DHTML 38DiagonalPanel 286Dialog

FriendStorageOnline 1074OpenFileDialog 1072SaveFileDialog 1075

DialogClosed 351DialogResult 224–225Dienstverweis

aktualisieren 728hinzufügen 719

Digital Rights Management 1019Direction (DropShadowEffect)

936Direction (SortDescription) 626Directory 1100DirectoryExists 873DirectoryInfo 1100DirectX SDK 940Disabled (ScrollBarVisibility) 232DiscreteDoubleKeyFrame 979,

983Diskrete Keyframe-Animation

982Dispatcher 129DispatcherOperation 131DispatcherPriority 131DispatcherTimer 996, 1008DisplayDate 266DisplayDateChanged 266DisplayDateEnd 266DisplayDateStart 266DisplayMemberPath 236DisplayMode (Calendar) 266DisplayModeChanged 267DLL 79DLR 46DNS 701DnsEndPoint 850DockPanel 321

Document (HtmlPage) 1130Document Object Model 1130DocumentElement (Html-

Document) 1135DocumentUri 1135DOM 1130DOM/Scripting Bridge 1131Domain Service 776DomainContext 782DomainContextType 798DomainDataSource 792Doppelklick 398Double.NaN 292DoubleAnimation 534, 970DoubleAnimationUsingKey-

Frames 979, 983DoubleKeyFrameCollection 979Down (TouchAction) 427Download 1077DownloadProgress 1013DownloadProgressChanged 815,

818DownloadStringAsync 815DownloadStringCompleted 815DownOnly (StretchDirection)

273DoWork 134Drag & Drop 405, 433DragEnter 434DragEventArgs 434DragLeave 434DragMove (Window) 1092DragOver 434DragResize (Window) 1092Drawing Loop 51, 282DrawingAttributes 420Dritthersteller 278DRM 1019Drop 434DropDownClosed (ComboBox)

246DropDownOpened (ComboBox)

246DropShadowEffect 935Drucken 1039

eines DataGrids 1049einfacher Ausdruck 1039in FriendStorageOnline 1053mit ASP.NET 1061

Drucken (Forts.)mit JavaScript 1061über mehrere Seiten 1044von Collections 1046

Duplex Service 750erstellen 751in Silverlight verwenden 753

Duration (Timeline) 966, 971DurationConverter 972dynamic 1102Dynamic HTML 38Dynamic Language Runtime 46dzc_output.xml 1034

E

Ease 985EaseInCore 992Easing Function 985

Basis-Animation 988eigene erstellen 992Grundlagen 985in Keyframe-Animation 990Klassenhierarchie 986

EasingDoubleKeyFrame 979, 990EasingFunctionBase 986EasingFunctionTester 987EasingMode 986ECMAScript 37EditorBrowsable 131Effect (Klasse) 934Effekt 934

BlurEffect 935DropShadowEffect 935eigener mit Pixel-Shadern 937in FriendStorageOnline 954Klassenhierarchie 934

Effekt-Klassen 934Eigenes Control

CustomControl 552FriendStorageOnline 583UserControl 577

Eigenschaft, angefügte 371ElasticEase 987Element (Position) 313Element Tree 198ElementEditingStyle 652ElementName (Binding) 597ElementStyle 652

Page 106: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1163

Ellipse 901EllipseGeometry 911Empty-Element-Syntax 158Emulator (Windows Phone) 1121Enable editing (WCF-RIA-Services)

778enableAutoZoom (object-Tag)

103, 1127enableCacheVisualization

(object-Tag) 103, 920EnableClientAccess 781enableFrameRateCounter

(object-Tag) 994enableGPUAcceleration

(object-Tag) 103, 920enableHtmlAccess (object-Tag)

103enableNavigation (object-Tag)

103Encoding (Klasse) 846EndAcceptTcpClient 845EndExecute (DataService-

Query<T>) 768EndGetRequestStream 826EndGetResponse 826EndPoint (LinearGradientBrush)

925EndPrint 1043EndSaveChanges 772EntityQuery<T> 783Entity-Referenz (XAML) 191EntryPointAssembly 80EntryPointType 80Entwicklungsprozess 153EnumerableCollectionView 619EnumerateFiles 1100Environment 1100Error (AsyncCompleted-

EventArgs 816Error (IDataErrorInfo) 634ErrorContent 646ErrorException 1005ErrorMessage 640Errors (Validation) 645ErrorsChanged (INotifyData-

ErrorInfo) 637ErrorStyle 644Escape-Sequenz 187EvenOdd (FillRule) 903

Event 385in FriendStorageOnline 439Maus 397Multitouch 423Stylus 419Tastatur 394

Event-Attribut 158EventTrigger 968Excel-Export 1104Execute 448Exit 126Expanded (TreeViewItem) 238Explicit (UpdateSourceTrigger)

602Expliziter Style 514ExponentialEase 987Export nach Excel 1104Expression Blend 155, 543Expression Encoder 1011Expression Suite 155Extended (DataGridSelec-

tionMode) 662Extended (SelectionMode) 250Extensible Application Markup

Language 153Extent (ScrollViewer) 232ExtentHeight (ScrollViewer) 232ExtentWidth (ScrollViewer) 232

F

FallbackValue (Binding) 597, 605Fiddler2 710Figures (PathGeometry) 913File (Klasse) 1100File (OpenFileDialog) 1073FileDrop 434FileExists 873FileInfo 434, 1073, 1100Files (OpenFileDialog) 1074FileStream 1073Fill (Shape) 900Fill (Stretch) 272FillBehavior 974FillBehavior (Timeline) 966FillRule 903

EvenOdd 903NonZero 904

Film-Trailer 977

Filter (CollectionViewSource) 627

Filter (ICollectionView) 625Filter (OpenFileDialog) 1073FilterDescriptors 794FilterEventArgs (Collection-

ViewSource) 627FilterIndex (OpenFileDialog)

1073Filtern (CollectionView) 625finalSize 285FindElementsInHostCoordinates

414FindName 117, 196Firebug 710FirstDayOfWeek 266FirstNameProperty 365FishEyePanel 352, 377FJCore 953Flash 41, 993Flexibles Inhaltsmodell 53float4 938FlowDirection 325Focus 207Focus (Control-Klasse) 395Focus (HtmlElement) 1137FocusControlsOnClick 644FocusStates 531FocusVisualElement 533Fokus 395FontFamily 206, 497FontSize 206FontSource 498FontStretch 206FontStyle 206FontWeight 206Foreground 206Forever (Duration) 972Forms (authentication mode) 733FormsAuthentication 798, 811Forms-Authentifizierung 733Frame (Klasse) 1107FrameReported 426Framework-Assembly 89, 203FrameworkElement 93FriendCreateCommand 465FriendCreateControl 467FriendlyName 1020FriendNewDialogRequired 467

Page 107: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1164

FriendStorage.mdf 852FriendStorageAuthService 853FriendStorageCommand 462FriendStorageOnline 44

2D-Grafik 9543D-Flipeffekt 348Animationen 997Authentifizierung 858binäre Ressourcen 507BindingHelper 379ChildWindow in 228CollectionViews 678Commands 461Controls 583DataGrid 682Daten 677Dependency Properties 377Drucken in 1053Effekte 954Entitäten Friend & Co. 677Events 439FishEyePanel 352, 377FriendCreateControl 583Isolated Storage 890Laden von Daten 863Layout 337logische Ressourcen 489MVVM in 461object-Tag 107OpenFileDialog 1074PlaneProjection 348Services 852Shapes 957Splashscreen 108Styles 545Templates 546ToolTip 231, 546validieren in 689, 853Webprojekt 99XML-Namespaces 171

FriendStorageService 853, 863FriendValidation 668From (DoubleAnimation) 970From (VisualTransition) 536From/To/By-Animation 965FromArgb 925FromBackToMain 350FromMainToBack 350, 490FromMilliSeconds 972

FromSeconds 972FullScreenChanged 1128FullScreenCommand 449Fullscreen-Modus 1127FullScreenOptions 1129Func<object, bool> 457fxc.exe 940FX-Compiler 940

G

GAC 813Gemeinsame Codebasis 101GeneralTransform 300Generated_Code 781GeneratedDuration (Visual-

Transition) 536Generic.xaml 553Generischer Handler 820Geometry 909

Anwendungsbereiche 910Clipping 918EllipseGeometry 911GeometryGroup 912Klassenhierarchie 910LineGeometry 912PathGeometry 913RectangleGeometry 910

Geometry (Klasse) 910GeometryCollection 912GeometryGroup 912GET (HTTP-Methode) 814GetAttribute 1137GetAvailableAudioCapture-

Devices 1027GetAvailableVideoCapture-

Devices 1020GetBindingExpression 604GetCallbackChannel 751GetChild 196GetChildrenCount 196GetContainerForItemOverride

241GetCurrentUserName 863GetData (IDataObject) 434GetDefaultAudioCaptureDevice

1027GetDefaultVideoCaptureDevice

1020

GetDirectoryNames 873GetElementById 1136GetElementsByTagName 1136GetErrors (INotifyDataErrorInfo)

637GetErrors (Validation) 645GetFileNames 873GetFolderPath 1100GetFriendListById 863GetFriendsByFriendListId 864GetHasError (Validation) 645GetIsNetworkAvailable 1092Get-Methoden 371GetParent 196GetPosition (MouseEventArgs)

398, 406GetPrimaryTouchPoint 426GetProperty (HtmlElement) 1137GetResourceStream 125, 494,

838GetResponseStream 826GetRolesForCurrentUserAsync

744GetStream (TcpClient) 846GetStyleAttribute (HtmlElement)

1137GetStylusPoints 419GetTemplateChild 558GetText (Clipboard) 437GetTouchPoints 426GetTwitterRssFeedString 718GetUserStoreForApplication 872GetUserStoreForSite 873GetValue 361Global Assembly Cache 813GlobalOffsetX (PlaneProjection)

316GlobalOffsetY (PlaneProjection)

316GlobalOffsetZ (PlaneProjection)

316GLSL 937GotFocus 395GoToState 565GradientBrush 925

Koordinatensystem 925LinearGradientBrush 925Offset von GradientStops 927RadialGradientBrush 927

Page 108: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1165

GradientOrigin (RadialGradient-Brush) 928

Gradients (GradientBrush) 925GradientStop 925GradientStopCollection 925GraffitiFont 496Grid 326GridLength 328GridLinesVisibility 671GridSplitter 331GridUnitType 328GroupDescriptions 661GroupDescriptors 794GroupName (RadioButton) 215

H

H.264 1002Hand (Cursors) 411Handled 390handledEventsToo 392HandleFriendCreate 465Handy 1117Hardwarebeschleunigung 919HasCloseButton 225HasElevatedPermissions 1099HasError (Validation) 645HasErrors (INotifyDataErrorInfo)

637HasHeader (TabItem) 251HashString 857HasItems (TreeViewItem) 238HasMorePages 1044Header (DataGridColumn) 651Header (HeaderedItemsControl)

237Header (TabItem) 251Headers (WebClient) 816HeadersVisibility 671HeaderTemplate 523HeaderTemplate (Headered-

ItemsControl) 237Height 291Height (DrawingAttributes) 420Height (RowDefinition) 328Herunterladen 1077Hidden (ScrollBarVisibility) 232HierarchicalDataTemplate 674High Level Shading Language 937

Hit-Testing 413HLSL 937Hochladen 1077HoldEnd (FillBehavior) 974Horizontal (Orientation) 324HorizontalAlignment 297, 335HorizontalContentAlignment

206, 298HorizontalGridLinesBrush 671HorizontalOffset (Popup) 274HorizontalOffset (ToolTip) 230HorizontalScrollBarVisibility 231Host (Application) 121, 1125Hover (ClickMode) 210HTML 36HTML Bridge 1131HTML Document Object Model

1130HTML DOM 1130HtmlDocument (Klasse) 1130,

1135HtmlElement (Klasse) 1130HtmlObject 1138HtmlPage 217HtmlPage (Klasse) 1130HtmlPopupWindowOptions

1134HtmlWindow (Klasse)

1131–1132HTTP 36HTTP Stack 841HttpContext 739, 821HTTP-Methode 814HttpRequest 821http-request-headers 706httpRuntime 825HttpServerUtility 822HTTP-Sniffer 709, 769HttpUtility (Klasse) 1131HttpWebRequest 825HttpWebResponse 826Hyperlink 261, 448HyperlinkButton 216, 1109Hypertext Markup Language 36Hypertext Transfer Protocol 36

I

IApplicationLifetimeAware 124IApplicationService 121IAsyncResult 767IAuthentication<T> 808ICollectionView 617ICommand 448Id (HtmlElement) 1138IDataErrorInfo 634IDataObject 434Identity 308, 747IDictionary 193, 361IDisposable 875IEasingFunction 985IEditableCollectionView 620IFrame 38IFriendStorageDialog 351Ignorable 164IIdentity 746, 801IInvalidateCommand 463IIS 1018IIS Smooth Streaming 1018IList 192Image 275ImageBrush 888, 930ImageFailed 502ImageSource 275, 947ImplicitInputBrush 934Impliziter Style 513INavigate 217, 1107include-subpaths 707IncreaseQuotaTo 873, 878Indeterminate (ToggleButton)

213Infragistics 279Inhalt (Buildvorgang) 499Inhaltsmodell

flexibles 53, 208InitializeComponent 116InitializeService 763InitParams 126initParams (object-Tag) 103InkPresenter 420Inline 260

Bold 261Hyperlink 261InlineUIContainer 260Italic 261

Page 109: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1166

Inline (Forts.)LineBreak 260Run 260Span 260Underline 261

InlineCollection 260Inlines (Property) 260Inline-Style 512InlineUIContainer 260INotifyCollectionChanged 614INotifyDataErrorInfo 637, 853INotifyPropertyChanged 607Input Event 385

in FriendStorageOnline 439Maus 397Multitouch 423Stylus 419Tastatur 394

InputStream (HttpRequest) 821input-Tag 1136Install (Application) 125, 1089Installed (InstallState) 1090InstallFailed (InstallState) 1090Installing (InstallState) 1090InstallState 121, 1089InstallStateChanged 126, 1090internal (Variable) 189Internet Information Server 1018Interpolation 965Interval (DispatcherTimer) 996Interval (RepeatButton) 211Invalid cross-thread access 129Invalidate (WriteableBitmap) 950InvalidateArrange 290InvalidateCommands 459InvalidateMeasure 290InvalidFocused (Validation-

States) 646InvalidUnfocused (Validation-

States) 646Inverse 300Inverted (StylusDevice) 422Invoke (HtmlWindow) 1141InvokeSelf 1141IP-Adresse 843IPagedCollectionView 629ipconfig 1103IPrincipal 746, 801IQueryable 769

IsAbsolute (DataGridLength) 654IsAbsolute (GridLength) 329IsAuthenticated 739, 746, 802IsAuto (DataGridLength) 654IsAuto (GridLength) 329IsAvailable 1103IsChecked 211IsChecked (CheckBox) 213IsClosed (PathFigure) 913IsDefaultDevice 1020IsDirectionReversed 270IsDropDownOpen (Auto-

CompleteBox) 255IsDropDownOpen (ComboBox)

246IsDropDownOpen (DatePicker)

267IsEditable 249IsEnabled 207, 448IsExpanded (TreeViewItem) 238IsFilled (PathFigure) 913IsFocused 251, 395IsFocused (ButtonBase) 211IsFullScreen 449, 1127IsHitTestVisible 412IsIndeterminate 270IsInRole 746IsItemsHost 321, 528IsLoaded (SilverlightHost) 1126IsMouseOver 211IsMuted (MediaElement) 1006Isolated Storage 869

Bilder speichern 887Größe 870Größe erhöhen 878Grundlagen 869Gültigkeitsbereich 870in FriendStorageOnline 890Konfiguration des Plugins 877zugreifen auf 872

IsolatedStorageException 874IsolatedStorageFile 872, 874IsolatedStorageFileStream 874IsolatedStorageSettings 874IsOpen (Popup) 274IsOpen (ToolTip) 231IsPressed (ButtonBase) 211IsReadOnly 664IsReadOnly (RichTextBox) 262

IsReadOnly (TextBox) 253IsRequired 219IsRunningOutOfBrowser 121,

1090IsSealed (Style) 518IsSelected (ComboBoxItem) 247IsSelected (TabItem) 251IsSelected (TreeViewItem) 238IsSelectionActive (TreeView-

Item) 238IsSizeToCells (DataGridLength)

654IsSizeToHeader (DataGrid-

Length) 654IsStar (DataGridLength) 654IsStar (GridLength) 329IsSynchronizedWithCurrentItem

245IsTabStop 207, 395IsTextCompletionEnabled 256IsThreeState 211IsTodayHighlighted 266IsVersionSupported 1127IsVirtualizing 335Italic 261ItemContainerGenerator 236ItemContainerStyle 516ItemContainerStyle (Headered-

ItemsControl) 237ItemFilter 257Items (ItemsControl) 235–236Items (SyndicationFeed) 831ItemsControl 235

ComboBox 246HeaderedItemsControl 237ListBox 250Selector 245TabControl 251TreeView 238TreeViewItem 238

ItemsPanel 236, 520ItemsPanelTemplate 520ItemsPresenter 528ItemsSource (AutoCompleteBox)

255ItemsSource (DataGrid) 647ItemsSource (ItemsControl) 236ItemTemplate 236, 248, 521ITimeCallback 751

Page 110: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1167

IUser 809IValueConverter 609

J

Java Applet 39Java Server Pages 41JavaFX 40JavaScript 36

aus Silverlight aufrufen 1141Eventhandler in Silverlight 1138Silverlight-Methode aufrufen

1142Silverlight-Objekt erstellen 1145

JavaScript Object Notation 833JournalOwnership 1107JScript 37JSON 833JSP 41Jump & Run 994

K

Keine (Buildvorgang) 501Key 394Key-Attribut 810Keyboard 397KeyboardNavigationMode 396KeyDown 394KeyEventArgs 394Keyframe-Animation 979

diskrete 982Easing Function 990lineare 980Spline 981

KeyFrames 979KeySpline 982KeyTime 980KeyUnknown 394KeyUp 394Klasse 88Kommunikation 699Komponentenhersteller 278Kontextmenü 399

L

Label 218Ladevorgang 49

LargeChange (RangeBase) 269lastFriendListID.txt 890Layout

Eigenschaften von Elementen 291

Elementposition 313FriendStorageOnline 337Panel 320Projektion 315-prozess 282Rounding 292–293Transformation 300Übersicht 59

LayoutRoot 74Left (Canvas) 321Left (HorizontalAlignment) 298LeftToRight (FlowDirection) 325Line (Shape) 902LinearDoubleKeyFrame 979Lineare Keyframe-Animation 980LinearGradientBrush 925

verschiedene Start-/Endpunkte 926

LineBreak 260LineGeometry 912LineHeight 259LineJoin 908LineSegment 913LINQ 769LINQ to XML 828LinqToEntitiesDomainSer-

vice<T> 779ListBox 250ListBoxItem 235, 250ListCollectionView 619Listen (LocalMessageReceiver)

1149ListOpenControl 349ListSortDirection 626LiveScript 36Load (DomainContext) 783Load (SyndicationFeed) 831Load (XamlReader) 194LoadComponent 116, 125LoadContent 524LoadFriendList 865, 890LoadingRow 671LoadSize 794

Local (KeyboardNavigati-onMode) 396

Local Messaging API 1148LocalMessageReceiver 1148LocalMessageSender 1149LocalOffsetX (PlaneProjection)

316LocalOffsetY (PlaneProjection)

316LocalOffsetZ (PlaneProjection)

317LoggedIn 800LoggedOut 800Logger 122Login 799, 811LoginAsync 738LoginCompleted 738LoginControl 859LoginOperation 799LoginParameters 799LoginSuccess 799LoginViewModel 859Logische Ressource 473

FriendStorageOnline 489in C# verwenden 481mit x:Name 480separate Datei 485Style 513suchen nach 476

Logout 799, 812Lokale Datei 1100Long (DatePickerFormat) 268LostFocus 395LostMouseCapture 405Low-Level-Animation 992

M

M11 (Matrix) 308M12 (Matrix) 308M21 (Matrix) 308M22 (Matrix) 308MainPage.g.cs 115MainPage.xaml 74MainPage.xaml.cs 74MainViewModel 455, 465, 468,

678MainWindow 1091ManipulationCompleted 433

Page 111: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1168

ManipulationDelta 433ManipulationStarted 433MapPath 822MappedUri 1110MappingMode 926Margin 294Marker (TimelineMarker-

RoutedEventArgs) 1011MarkerReached 1011MarkErrorAsHandled 803Markers 1012Markup-Extension 184

Escape-Sequenz für 187Funktionsweise 185Konstruktoraufruf bei 185Syntax 185von Silverlight 187XAML 188

Master-Detail 622Matrix 308Matrix (MatrixTransform) 308Matrix3D 319Matrix3DProjection 319MatrixTransform 308Maus 397Maus-Capturing 402Mausrad 410Mauszeiger 411MaxDropDownHeight 249maxFrameRate (object-Tag) 104,

994MaxHeight 291Maximized (WindowState) 1092Maximum (RangeBase) 269MaxLength 253maxRequestLength 825MaxWidth 291mc 164MD5 857Measure 283MeasureOverride 285MediaElement 1002MediaElementState 1005MediaEnded 1006MediaFailed 502, 1005MediaOpened 1004, 1006Meldungsfenster 1094MemberName (Validation-

Context) 640

MergedDictionaries 487Message (MessageReceived-

EventArgs) 1149MessageBox 229MessageReceived 1149MessageReceivedEventArgs 1149MetadataTypeAttribute 790Metadaten (Dependency

Properties) 367Metadaten (WCF-RIA-Services)

789Microsoft.CSharp.dll 1102Mikrofon 1027MIME-Type 85MinHeight 291Minimized (WindowState) 1092Minimum (RangeBase) 269MinimumPopupDelay 257MinimumPrefixLength 256minRuntimeVersion (object-Tag)

104MinWidth 291Mode (Binding) 597, 601Mode (RelativeSource) 612Model (MVC) 451Model (MVVM) 453Model-View-Controller (MVC)

451Model-View-ViewModel 450ModifierKeys 397Modifiers (Keyboard-Klasse) 397Month (CalendarMode) 266Moonlight 48Mosaic 36MouseButtonEventArgs 398MouseDoubleClick 398MouseEnter 398MouseEventArgs 398MouseLeave 398MouseLeftButtonDown 398MouseLeftButtonUp 398MouseMove 398, 405MouseRightButtonDown 398MouseRightButtonUp 398MouseWheel 398, 410MouseWheelEventArgs 398Move (TouchAction) 427MoveCurrentToFirst 617MoveCurrentToLast 617

MoveCurrentToNext 617, 620MoveCurrentToPosition 617MoveCurrentToPrevious 617,

620MoveToNextPage 629MoveToPreviousPage 629MP3 1002mscorlib.dll 89Multicast 852Multimedia 1001

Audio 1001Deep Zoom 1030Mikrofon 1019Video 1001Webcam 1019

Multiple (SelectionMode) 250MultiScaleImage 1034Multiselect (OpenFileDialog)

1073Multithreading 129Multitouch 423

benötigte Hardware 424Funktionsweise 423

MVC 451MVVM 450

Architektur 454Beispiel 455Hintergründe 452in FriendStorageOnline 461

N

Nachrichten austauschen 1148Nachrichtenschleife 282Name (FrameworkElement) 190Namespace 159

Alias 165Präfix 165

Namespace-Mapping 160, 166NaN 292NaturalDuration 1005NaturalVideoHeight 1003NaturalVideoWidth 1003Navigate (Frame) 1107Navigate (HtmlWindow) 1132Navigate (Hyperlink Button) 218NavigateToBookmark 1134NavigateUri (HyperlinkButton)

216

Page 112: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1169

NavigationContext 1108, 1113Navigationsanwendung 1107

erstellen 1108URIs anpassen 1110Vorlage in Visual Studio 1113

NavigationService (Property) 1108, 1112

NavigationState (SilverlightHost) 1126

NetworkAddressChanged 1092NetworkChange 1092NetworkCredential 816NetworkInterface 1092NetworkStream 846None (CalendarSelectionMode)

265None (Cursors) 412None (Stretch) 272None (TextTrimming) 259NonZero (FillRule) 904Normal (WindowState) 1092Normalisierte Zeit 986Normalized Time 986notepad.exe 1103NotificationWindow 1094NotifyCollectionChangedAction

614NotifyCollectionChanged-

EventArgs 614NotifyErrorViewModelBase 855NotifyOnValidationError 597NotInstalled (InstallState) 1090NotSupportedException 1099NoWrap (TextWrapping) 259

O

Object (Klasse) 92Object Tree 196ObjectAnimationUsingKey-

Frames 984ObjectContext 779object-Tag 81, 101

Größe und Position 106Parameter 103

Objektelement 158ObservableCollection<T> 614OffsetX (Matrix) 308OffsetY (Matrix) 308

OnApplyTemplate 543, 558OnCaptureStarted 1026OnCaptureStopped 1026Once (KeyboardNavigation-

Mode) 396onchange (JavaScript) 1139onclick (JavaScript) 1138OnClosed (ChildWindow) 226OnClosing (ChildWindow) 226onEnterFrame 993onError (object-Tag) 104OneTime (BindingMode) 601OneWay (BindingMode) 601OnFormatChanged 1026onFullscreenchanged (object-Tag)

104onResized (object-Tag) 104OnSample 1026onSilverlightError 82onSourceDownloadComplete

(object-Tag) 104onSourceDownloadProgress-

Changed (object-Tag) 104onZoom (object-Tag) 104OOB 1081Opacity 407, 928OpacityMask 929Opened (Popup) 274Opened (ToolTip) 231OpenFile (IsolatedStorageFile)

873OpenFile (SaveFileDialog) 1076OpenFileDialog 1072OpenGL Shading Language 937Opening (MediaElementState)

1005OpenRead 719, 1073OpenRead (FileInfo) 435OpenReadAsync 815OpenReadCompleted 815OpenWriteAsync 816OpenWriteCompleted 816OperationContext 751option-Tag 1139Orientation (Slider) 269Orientation (StackPanel) 324OriginalSource 389Oscillations 987

OutlineColor (Drawing-Attributes) 420

Out-of-Browser-Anwendung 1081debuggen 1082direkt installieren 1095erstellen 1081Installationsdialog 1083installieren 1083konfigurieren 1084programmatisch installieren

1089Updates prüfen 1092vertrauenswürdig 1096

OutOfBrowserSettings.xml 1086OverlayBrush 225OverlayOpacity 225

P

Pad (SpreadMethod) 926Padding 207, 296Page (Klasse) 1108PageChanged 629PagedCollectionView 618, 629PageIndex 630PageMargins 1044PageSize 629PageVisual 1044Panel 94, 286, 320

Alignment-Übersicht 335Canvas 321DockPanel 321FishEyePanel 352, 377Grid 326SimpleCanvas 372StackPanel 324VirtualizingPanel 334VirtualizingStackPanel 334wenn Platz nicht ausreicht 336WrapPanel 321

Paragraph 262param 102Parameter übergeben 126parent 217Parent (HtmlElement) 1135,

1138ParentBinding (Binding-

Expression) 604

Page 113: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1170

PartTemplate 542, 557

Parts-and-States-Modell 542Password 255PasswordBox 255PasswordChar 255Passwort hashen 856Path 909Path (Binding) 597, 599PathFigure 913PathGeometry 913Path-Markup-Syntax 916PathSegment 913

ArcSegment 913BezierSegment 914LineSegment 913PolyBezierSegment 915PolyLineSegment 913PolyQuadraticBezierSegment

913QuadraticBezierSegment 914

Pause (MediaElement) 1005Pause (Storyboard) 967, 975Paused (MediaElementState)

1005PDB 79PenLineCap 907PersistCurrentFriendListID 890PhoneApplicationPage 1118PHP 41Pixel (DataGridLengthUnitType)

654Pixel (GridUnitType) 328Pixels (WritableBitmap) 949Pixel-Shader 937

erstellen 937kompilieren 940

PixelShaderConstantCallback 944placeHolder 348Placement 230PlacementMode 230PlacementTarget 230PlaneProjection 316, 348Platform (BrowserInformation)

1132PlatformKeyCode 394PlatformNotSupportedException

1093Play (MediaElement) 1005

Playing (MediaElementState) 1005

Playlist 1016Plugin 39Plugin (HtmlPage) 1130plugin.Content (JavaScript) 1144plugin.Content.services.create-

Object 1147PointAnimation 970PointCollection 902policy 706Policy-Datei 700Policy-Server 844Polling 750PollingDuplexHttpBinding 717,

753PolyBezierSegment 915Polygon (Shape) 903Polyline (Shape) 902PolyLineSegment 913PolyQuadraticBezierSegment 913Popup 274PopupWindow (Htmlpage) 1134Port 843Port 4502–4532 844Port 943 844Position (MediaElement) 1005Position (TouchPoint) 427POST (HTTP-Methode) 814Postback 37PowerEase 987PowerSixEase 992Präfix (Namespace) 165Predicate<Object> 625PresentationCore 48preserve (xml:space) 191Press (ClickMode) 210PressureFactor 419Print 1043PrintableArea 1044PrintDocument 1043PrintedPageCount 1044PrintPage 1043PrintPageEventArgs 1043PrintVisualTree 197PRISM 461ProcessRequest 821ProductName (Browser-

Information) 1132

ProductVersion (Browser-Information) 1132

Program Database Information 79

ProgressBar 542ProgressBarIndicator 542ProgressBarTrack 542ProgressChanged 134ProgressPercentage 818Projection 315ProjectionMatrix (Plane-

Projection) 317, 319Projektion 315

Matrix3DProjection 319PlaneProjection 316, 348

propa (Code-Snippet) 372propdp (Code-Snippet) 367Property (Setter) 513Property Engine 363Property System 363Property-Attribut 158PropertyChanged 607PropertyChangedCallback 368Property-Element 173Property-Element-Syntax 173PropertyGroupDescription 661PropertyMetadata 367PropertyName (SortDescription)

626PropertyPath 599ProtocolType 849Proxy-Klasse 723

Q

QuadraticBezierSegment 914QuadraticEase 987QuarticEase 987QueryName 792QueryString 1113QuinticEase 987Quota (IsolatedStorageFile) 880

R

RadialGradientBrush 927verschiedene Center 928verschiedene GradientOrigins

928

Page 114: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1171

RadioButton 214Radius (BlurEffect) 935RadiusX (Rectangle) 900RadiusY (Rectangle) 900RangeAttribute 639RangeBase 268Range-Control 268

ProgressBar 270RangeBase 268ScrollBar 271Slider 269

ReadLastFriendListID 891ReadLocalValue 369, 603ReadObject 836Really Simple Syndication (RSS)

831ReceiveAsync 850Rect 284Rectangle 900RectangleGeometry 297, 910Reference.cs 722Reflect (SpreadMethod) 926Reflection 160Reflector 87Register 365RegisterAttached 373RegisterCreateableType 1146RegisterPrefix (WebRequest) 842RegisterScriptableObject 1143RegisterViewModel 855Reihenfolge, Tab 396RelativeSource 188RelativeSource (Binding) 597,

612RelativeSourceMode 612RelativeToBoundingBox 926Release (ClickMode) 210RemoteEndPoint 850Remove (IsolatedStorageFile) 873Remove (NotifyCollection-

ChangedAction) 614RemoveAttribute (HtmlElement)

1137RemoveChild (HtmlElement)

1137RemoveHandler 391RemoveStyleAttribute (Html-

Element) 1137Render (WriteableBitmap) 952

RenderAtScale 920Rendering (CompositionTarget)

992Rendering-Pipeline 50RenderSize 284RenderTransform 301RenderTransformOrigin 303Repeat (SpreadMethod) 926RepeatBehavior (Timeline) 966,

973RepeatButton 211Replace (NotifyCollection-

ChangedAction) 614Request (HttpContext) 821RequestDeviceAccess 1021RequiredAttribute 639, 791RequiresAuthentication-Attribut

802Reset (NotifyCollection-

ChangedAction) 614Resource (Buildvorgang) 491ResourceDictionary 474, 485Resources (Application) 120Resources (Property) 474Response (MessageReceived-

EventArgs) 1149Response (SendCompleted-

EventArgs) 1149Ressource 473

binäre 490logische 473Übersicht 64

Ressourcenpfad 476REST 755Result (DownloadStringAsync)

815Resume (Storyboard) 975RGB 924RIA 42RIA Service 773Rich Internet Application 42RichTextBox 262Right (HorizontalAlignment) 298RightToLeft (FlowDirection) 325RoleService 742RoleServiceClient 744Rolle 742RootVisual 76, 120RotateTransform 302, 304

Rotation (CompositeTransform) 311

RotationX (PlaneProjection) 316RotationY (PlaneProjection) 316RotationZ (PlaneProjection) 316Routed Event 385

behandelte Events 392in C# 391Sender & Co. 387Silverlight 386

RoutedEvent 391RoutedEventArgs 387Row (Grid) 327RowBackground 671RowDefinition 327RowDefinitions (Grid) 327RowDetailsTemplate 660RowDetailsVisibilityMode 660RowHeaderStyle 671RowHeaderStyle (DataGrid) 518RowHeaderWidth 671RowSpan (Grid) 327RowStyle 671RowStyle (DataGrid) 518RSS (Really Simple Syndication)

831Run 260RuntimeVersion 80RunWorkerAsync 134

S

s0 938SafeFileName 1076sampler2D 938Sandbox 1096SaveFileDialog 1075ScaleTransform 305ScaleX (CompositeTransform)

311ScaleX (ScaleTransform) 305ScaleY (CompositeTransform)

311ScaleY (ScaleTransform) 305Schlüsselbilder 979Schrift 496

in Assembly einbetten 496Standardschriften 496

Screenshot 951

Page 115: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1172

ScriptableMemberAttribute 1131, 1142

ScriptableTypeAttribute 1131, 1146

ScriptObject 1141ScrollableHeight 232ScrollableWidth 232ScrollBar 231, 271ScrollBarVisibility 231ScrollContentPresenter 529ScrollToHorizontalOffset 234ScrollToVerticalOffset 234ScrollViewer 231, 336SDK 90, 203sdk (XML-Namespace) 170SearchText 257SecurityException 740, 1072Seek (Storyboard) 977SegmentCollection 913Segments (PathFigure) 913Selected (TreeViewItem) 238SelectedDate (Calendar) 264SelectedDate (DatePicker) 267SelectedDates 264SelectedDatesChanged 265SelectedFormat (DatePicker) 268SelectedIndex 245SelectedItem 245SelectedItem (DataGrid) 662SelectedItem (TreeView) 238SelectedItemChanged 238SelectedItems 250SelectedItems (DataGrid) 662SelectedText 254SelectedValue 245, 659SelectedValuePath 245, 659SelectedValuePath (TreeView)

242Selection (RichTextBox) 262SelectionBackground 254SelectionBoxItem 249SelectionChanged 245SelectionChanged (DataGrid) 663SelectionChanged (TextBox) 254SelectionForeground 254SelectionLength 254SelectionMode (Calendar) 264SelectionMode (DataGrid) 662SelectionMode (ListBox) 250

SelectionStart 254Selector 245

ComboBox 246ListBox 250

select-Tag 1139SeletedValue (TreeView) 242self 217Self (RelativeSourceMode) 612SendAsync (LocalMessage-

Sender) 1149SendCompleted (LocalMessage-

Sender) 1149SendKeys 1103Server (HttpContext) 822Service 699

Cross-Domain-Zugriff 700FriendStorageOnline 852Funktionsweise 701HttpWebRequest 814JSON-Daten laden 833RSS-Daten laden 831Socket-Kommunikation 842WCF 715WCF-Data-Service 755WCF-RIA-Service 773WebClient 814XML-Daten laden 828ZIP-Datei laden 838

ServiceContext 805ServiceContract 751ServiceReferences.ClientConfig

721SetAttribute (HtmlElement) 1137SetAuthCookie 811SetBinding 595SetBuffer 850SetEntitySetAccessRule 763Set-Methoden 371SetServiceOperationAccessRule

763SetSource (BitmapImage) 948SetSource (MediaElement) 1003SetSource (VideoBrush) 1022SetStyleAttribute (HtmlElement)

1137SetTarget (Storyboard) 967Setter 513SetterBase 512SetterBaseCollection 512

Setters (Style) 512SetText (Clipboard) 437Settings (SilverlightHost) 1126SetValue 361SGML 36ShaderEffect 942ShadowDepth 936Shape 900

Ellipse 901in FriendStorageOnline 957Klasse 900Klassenhierarchie 900Line 902Path 909Polygon 903Polyline 902Rectangle 900Smilie aus Shapes 905Stroke-Properties 907

Shift (ModifierKeys) 397Short (DatePickerFormat) 268Show (ChildWindow) 227Show (NotificationWindow)

1094ShowDialog 1072ShowFriendStorageBackside-

Dialog 351, 467, 490ShowGridLines (Grid) 327ShowsPreview (GridSplitter) 334Signieren

.xap-Datei 1097SignOut 812Silverlight

Anwendung im Browser 85Architektur 48Assemblies 89Basisklassen 91Command-Modell 448dekompilieren 86Drucken in 1039generierte Dateien 114Größe reduzieren 135Installationsaufforderung 106Isolated Storage 877Kommunikation 699Konzepte 53Ladevorgang 49mit MVVM 454Multimedia 1001

Page 116: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1173

Silverlight (Forts.)Namespace 87Neuerungen in Version 4 52Parameter übergeben 126Projekt 71Rendering-Pipeline 50Routed Events 386SDK 90, 203Services 699Standardschriften 496Stärken und Schwächen 46Toolkit 276Überblick 41XML-Namespace von 159

Silverlight Application Package 79

Silverlight Launcher 1095Silverlight SDK 90, 203

XML-Namespace 170Silverlight Toolkit 276Silverlight.js 98Silverlight-Anwendung

Ladevorgang 83mit Webprojekt 95Vorlage 72

Silverlight-Architektur.NET für Silverlight 48Browser Host 49PresentationCore 48

SilverlightHost 1125Silverlight-Klassenbibliothek 100Silverlight-Konzepte

3D 67Data Binding 66Dependency Properties 60Layout 59Ressourcen 64Styles und Templates 65XAML 56

Silverlight-Projektimplementieren 77Output 78starten 77Struktur 73

SilverlightStartupTestPage.html 79

Silverlight-Symbol 101SilverlightXamlEditor 194SimpleCanvas 372

SineEase 987Single (DataGridSelectionMode)

662Single (SelectionMode) 250SingleDate (CalendarSelec-

tionMode) 264SingleRange (CalendarSelec-

tionMode) 264Site-of-Origin 500SiteSettings 876Size 283SizeToCells (DataGridLength-

UnitType) 654SizeToHeader (DataGridLength-

UnitType) 654SkewTransform 306SkewX (CompositeTransform)

311SkewY (CompositeTransform)

311SkipToFill (Storyboard) 977Slider 269sllauncher.exe 1095SlSvcUtil.exe 723SmallChange (RangeBase) 269Smooth Streaming 1018SOAP 716SOAPAction 706Socket 751, 842

App-Server erstellen 847aus Silverlight kommunizieren

849Grundlagen 843Policy-Server erstellen 844Silverlight 844

Socket (Klasse) 849SocketAsyncEventArgs 850SocketType 849Software Development Kit 90,

203SolidColorBrush 924SortDescription 626SortDescriptions (ICollection-

View) 625SortDescriptors 794Sortieren

CollectionView 625Source

Frame 1107

Source (Forts.)MediaElement 1003ResourceDictionary 485

Source (Binding) 597Source (CollectionViewSource)

619Source (DataPager) 629Source (Image) 275source (object-Tag) 104Source (SilverlightHost) 1126SourceCollection (ICollection-

View) 618Spaltentypen 651Span 260SpecialFolder 1100SpeedRatio (Timeline) 966, 972Spieleentwicklung 994SplashScreen 84Splashscreen 108splashScreenSource (object-Tag)

104SplineDoubleKeyFrame 979, 981SplineKeyframe-Animation 981Spracherweiterungen (XAML)

188SpreadMethod 926Springiness 987StackPanel 324Standard Generalized Markup

Language 36Standardschriften 496Star (DataGridLengthUnitType)

654Star (GridUnitType) 328Start (CaptureSource) 1021Start (Storyboard) 975StartPoint (LinearGradientBrush)

925StartService 122Startup 76, 126Startzeit 972State (CaptureSource) 1023StaticResource 188, 474StaysFullScreenWhenUnfocused

1129Stern (*) 329Stop (CaptureSource) 1021Stop (FillBehavior) 974Stop (MediaElement) 1005

Page 117: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1174

Stop (Storyboard) 967, 975Stopped (MediaElementState)

1005StopService 122Storyboard 534, 966, 975StreamResourceInfo 494, 839StreamWriter 1076Stretch (HorizontalAlignment)

298Stretch (MediaElement) 1004Stretch (VerticalAlignment) 298Stretch (Viewbox) 272StretchDirection (Viewbox) 273StringFormat (Binding) 597StringHasher 857StringLengthAttribute 640StringReader 832Stroke 419Stroke-Properties

Shape 907Strokes (InkPresenter) 420Style 511, 573

benannter 513erweitern 516expliziter 514Grundlagen 512impliziter 513in C# erstellen 516in FriendStorageOnline 545Klasse 512logische Ressource 513Übersicht 65

StyleTypedPropertyAttribute 518Stylus 419StylusDevice 419StylusPoint 419StylusPointCollection 419SubmitChanges 787, 794SubmittedChanges 794SubmittingChanges 794Summary (SyndicationItem) 831SuspendMousePromotion-

UntilTouchUp 426SyndicationFeed 831SyndicationItem 831System (Namespace) 88System.Collections.Generic 88System.Collections.Specialized

614

System.ComponentModel 178, 617

System.ComponentModel.Data-Annotations 639

System.Core.dll 90System.Data.Services.Client.dll

90, 766system.dll 89System.IO 88, 1100System.IO.IsolatedStorage 869System.Linq 88System.Net 814System.Net.Browser 842System.Net.dll 90System.Net.NetworkInformation

1092System.Net.Sockets 849System.Reflection 88System.Runtime.Interop-

Services.Automation 1102System.Security.Principal 746System.ServiceModel 88System.ServiceModel.Domain-

Services.Client.Application-Services 798

System.ServiceModel.Polling-Duplex.dll 752

System.ServiceModel.Syndica-tion 831

System.Threading 88System.Threading.Timer 996System.Windows 88System.Windows.Browser 88,

1130System.Windows.Browser.dll 90System.Windows.Controls 88,

204System.Windows.Cont-

rols.Data.dll 90, 649System.Windows.Controls.dll 90System.Windows.Controls.

DomainServices.dll 792System.Windows.Controls.

Input.dll 90System.Windows.Controls.

Navigation.dll 90, 1107System.Windows.Controls.

Primitives 210System.Windows.Data 88, 593

System.Windows.dll 90System.Windows.Ink 419System.Windows.Input 394System.Windows.Interop 1125System.Windows.Markup 160,

163System.Windows.Media 88, 196,

300, 910, 947, 1001System.Windows.Media.

Animation 963–964System.Windows.Media.Effects

934System.Windows.Messaging

1148System.Windows.Printing 1040System.Windows.Shapes 900System.Xml 88, 828System.Xml.dll 90System.Xml.Linq 828Systeml.Xml.Linq.dll 90

T

TabControl 251, 523TabIndex 207, 396TabItem 235, 251, 523TabletDeviceType 422TabNavigation 207, 396Tab-Reihenfolge 396TabStripPlacement 251TagName (HtmlElement) 1138target-Attribut (HTML) 217TargetName (HyperlinkButton)

216TargetName (Storyboard) 967TargetNullValue 597TargetProperty (Storyboard) 967TargetType (ControlTemplate)

525TargetType (Style) 512Tastatur 394TCP 842TcpClient 845TcpListener 845Telerik 278Template 207, 518

Arten 519ControlTemplate 525DataTemplate 521

Page 118: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1175

Template (Forts.)FriendStorageOnline 546ItemsPanelTemplate 520Übersicht 65

Template (Control) 525Template Part 542, 557TemplateBinding 188, 526, 555,

613TemplatedParent (RelativeSource-

Mode) 612TemplatePartAttribute 541, 561TemplateVisualStateAttribute

531, 564tex2D 938TEXCOORD 938TextAlignment 253, 259TextBlock 259TextBox 253TextBoxStyle 255TextChanged 254, 380TextCompositionEventArgs 394Text-Control 253

AutoCompleteBox 255PasswordBox 255RichTextBox 262TextBlock 259TextBox 253

TextDecorations 259TextFilter 257TextInput 394TextReader 832TextTrimming 259Textur 938TextWrapping 253, 259Thickness 294Threading 129Tick (DispatcherTimer) 996TileBrush 929

ImageBrush 930VideoBrush 931WebBrowserBrush 932

Time (TimelineMarker) 1011Timeline 966TimelineCollection 966TimelineMarker 1011TimeService 751TimeSpan 972Title (ChildWindow) 225Title (SyndicationItem) 831

To (DoubleAnimation) 970To (VisualTransition) 536Toast 1094ToggleButton 211Toolkit 276ToolTip 229, 546ToolTipService 229Top (Canvas) 321Top (VerticalAlignment) 298TopMost (Window) 1092TotalBytesToReceive 818Touch 423, 426TouchAction 427TouchDevice (TouchPoint) 427TouchFrameEventArgs 426TouchPoint 426Transform 300Transformation 300

CompositeTransform 311MatrixTransform 308RotateTransform 304ScaleTransform 305SkewTransform 306TransformGroup 310TranslateTransform 307

TransformCollection 310TransformGroup 310TransformToVisual 313Transitions (VisualStateGroup)

536TranslateTransform 307TranslateX (Composite-

Transform) 311TranslateY (Composite-

Transform) 311Transmission Control Protocol

842Transparenz

Opacity 928OpacityMask 929

TreeView 238, 675TreeViewItem 238Trigger 55Triggers 968TryToLoadLastList 862, 891TTF 496Twitter 715TwitterService 717TwoWay (BindingMode) 601

type (object-Tag) 82Type-Converter 178

eigenen implementieren 179Konvertierung durch

XAML-Parser 183TypeConverterAttribute 182

U

UIElement 93UIElementCollection 286, 321UI-Thread 129UnauthorizedAccessException

129, 864Unchecked (ToggleButton) 213Und, bitweises 397Underline 261Underline (TextDecorations) 259UnhandledException 126Uniform (Stretch) 272UniformToFill (Stretch) 272UnitType 654Unselected (TreeViewItem) 238Up (TouchAction) 427UpdateAvailable 1093UpdateLayout 290UpdateObject 772UpdateSource 603UpdateSourceOnChange 379,

694UpdateSourceTrigger 597, 602Upload 1077UploadProgressChanged 816UploadStringAsync 815UploadStringCompleted 816UpOnly (StretchDirection) 273URI 822UriBuilder 822UriMapper 1110UriMapping 1110UsedSize (IsolatedStorageFile)

880UseLayoutRounding 293User (HttpContext) 745User (WebContext) 801UserAgent (BrowserInformation)

1132UserAuthService 796UserControl 74, 577–578

Page 119: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1176

UserState 738using 875

V

Valid (ValidationStates) 646ValidateProperty 640ValidatesOnDataErrors 597, 636ValidatesOnExceptions 597, 634ValidatesOnNotifyDataErrors

597ValidateUser 811, 858Validation.Errors 645ValidationAttribute 639ValidationContext 640ValidationError 645ValidationException 640ValidationStates 646ValidationSummary 642ValidationSummaryItem 644Validator 640Validieren

Anzeige anpassen 646Benutzereingabe 632Fehler von Hand auslesen 645FriendStorageOnline 853in FriendStorageOnline 689mehrere Fehler anzeigen 642mit Exceptions 633mit IDataErrorInfo 634mit INotifyDataErrorInfo 637,

853mit ValidationAttributes 639WCF-RIA-Services 789

Value (<Typ>Keyframe) 980Value (GridLength) 328Value (RangeBase) 269Value (Setter) 513ValueChanged (RangeBase) 269ValueMemberPath (Auto-

CompleteBox) 258Vertex-Shader 937Vertical (Orientation) 324VerticalAlignment 297, 335VerticalContentAlignment 207,

298VerticalGridLinesBrush 671VerticalOffset (Popup) 274VerticalOffset (ToolTip) 230

VerticalScrollBarVisibility 231Video 1001

abspielen mit Webcam 1019Abspielen steuern 1005auf Fehler reagieren 1005Buffering 1015Datei abspielen 1003Downloadvorgang 1013Formate 1002Marker verwenden 1011Wiedergabeliste 1016

VideoBrush 931, 1022VideoCaptureDevice 1020VideoFormat 1027VideoPlayer 552VideoSink (Klasse) 1026VideoStates 564View (CollectionViewSource) 619View (MVC) 451View (MVVM) 453Viewbox 272, 306, 336ViewModel (MVVM) 453ViewModelBase 463Viewport 232ViewportHeight (ScrollViewer)

232ViewportWidth (ScrollViewer)

232VirtualizingPanel 334VirtualizingStackPanel 334Visibility 299Visible (ScrollBarVisibility) 232Visible (Visibility) 299VisibleWhenSelected (DataGrid-

RowDetailsVisibilityMode ) 660

Visual State 531, 564Visual Studio

Code-Snippet 367, 372generierte Dateien 114Projektvorlage 95Silverlight-Anwendung mit

Webprojekt 95Silverlight-Anwendung ohne

Webprojekt 72Silverlight-Klassenbibliothek 100

Visual Tree 196VisualState 533VisualStateGroup 568

VisualStateGroups 532, 568VisualStateManager 532, 565,

568VisualTransition 536, 566VisualTreeHelper 196, 413, 524Vollbildmodus 1127

einschalten 1127Einschränkungen 1129

Volume (MediaElement) 1006Vorrangsrecht (Dependency

Properties) 362

W

W3C 36W3-Konsortium 36Wait (Cursors) 411WalkTree 1135WavHelper 1029WCF-Data-Service 755

Abfrage einschränken und sortieren 769

aus Silverlight nutzen 766Client Library 771Entity Model erstellen 757erstellen 761mit HTTP-Sniffer beobachten

769über die URL abfragen 764Update mit 771

WCF-RIA-Service 773aktivieren 774aus Silverlight nutzen 781Authentifizierung mit 796Benutzername prüfen 853Business-Application-Vorlage

1115Daten validieren 789Delete 786deployen 813Domain Service erstellen 776DomainDataSource 792eigene Benutzerverwaltung 806FriendStorageOnline 858Insert 786Metadaten 789Update 786Verbindung Silverlight und Web

774

Page 120: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1177

WCF-Service 715Authentifizierung 731Autorisierung mit 742erstellen 716generierte Proxy-Klassen 723konfigurieren 728mit komplexen Objekten 725referenzieren 719Silverlight-aktivierter 717Zugriff auf Twitter 716zweiseitige Kommunikation 750

Web 2.0 39Web Development Helper 710Web Service Description Language

720Web.config 717, 733WebBrowser 1107WebBrowserBrush 932, 1107Webcam 1019

Bild aufnehmen 1023Rohdaten verarbeiten 1026zugreifen auf 1019

WebClient 502, 814Datei herunterladen 816Datei hochladen 820Fortschritt anzeigen 818

WebContext 782, 798Webentwicklung

ActiveX 40Adobe Flash 41Ajax 38ASP.NET 41CSS 37DHTML 38HTML 36Java Applet 39JavaFX 40JavaScript 36JSP 41PHP 41Plugin 39Silverlight 41Technologien 35Web 2.0 39

WebRequest 825WebRequestCreator 842Width 291Width (ColumnDefinition) 328Width (DrawingAttributes) 420

Wiedergabeliste 1016Window 1091Window (HtmlPage) 1130windowless (object-Tag) 104Windows (ModifierKeys) 397Windows Media Audio 1002Windows Media Server 1017Windows Media Video 1002Windows Phone 1117Windows Phone Emulator 1121WindowState 1091WMA 1002WMV 1002WMVA 1002WMVC1 1002Wohlgeformtheit 157WordEllipsis (TextTrimming) 259WorkerReportsProgress 134Worker-Thread 129WPF Everywhere (WPF/E) 53Wrap (TextWrapping) 259WrapPanel 321WriteableBitmap 949, 1023WScript.Shell 1103WSDL 720WSX 1016Wurzelelement 157

X

X (TranslateTransform) 307x:Class 74, 190x:Code 191x:Key 190, 474x:Name 189–190, 480x:Null 188x:Shared 191XAML 153

Attached-Property-Syntax 177Attribut 157Attribut-Syntax 172CLR-Namespace 163CLR-Namespaces von Silverlight

162Collection 192Compatibility-Namespace von

164Content Property 174Default-Property 174

XAML (Forts.)dynamisch laden 194eigener CLR-Namespace 165Element 157erweiterbar 165Markup-Extension 184Namespace 159Namespace-Mapping 166Property setzen 171Property-Element-Syntax 173Spracherweiterungen 188Type-Converter 178Übersicht 56verschachtelte Elemente 157Visual Tree 196Vorteile 156XML-Namespace 163

Xaml (RichTextBox) 264XAML Application Package 79XAML-Compatibility-Namespace

164XAML-Compiler 163XamlParseException 194, 480XAML-Parser 160, 163XamlReader 194XAP (Silverlight Application

Package) 79XDocument 828XML 157

Attribut 157Element 157

xml:lang 191xml:space 191XMLHttpRequest 38XML-Namespace 159

Visual Studio Designer 164vom Silverlight SDK 170von Silverlight 159XAML 163

XmlNamespace 160xmlns 159XmlnsDefinitionAttribute 160,

169, 570XmlnsPrefixAttribute 170, 570XmlReader 828, 832XmlSerializer 828, 885XmlWriter 828

Page 121: Silverlight - s3-eu-west-1.amazonaws.com€¦ · Inhalt 6 2.1.5 Ladevorgang der Silverlight-Anwendung ..... 83 2.1.6 Die Silverlight-Anwendung im Browser ..... 85

Index

1178

Y

Y (TranslateTransform) 307Year (CalendarMode) 266

Z

Zeiger 620ZIndex 324ZIndex (Canvas) 321

ZIP-Datei 838ZoomAboutLogicalPoint 1035ZoomFactor 1126ZoomFactorChanged 1126Zwischenablage 437