Geleitwort des Herausgebers | 6 |
Vorwort | 18 |
1?Einführung | 20 |
1.1?Zielgruppe | 21 |
1.2?Voraussetzungen | 22 |
1.2.1?Betriebssysteme | 22 |
1.2.2?Entwicklungsumgebung | 23 |
1.3?Das .NET Framework 4 | 24 |
1.4?Das .NET Framework 4.5 | 24 |
1.5?Windows Presentation Foundation | 25 |
1.6?Silverlight | 27 |
1.7?Pixel sind tot – es lebe die Vektorgrafik | 27 |
1.8?Der Aufbau dieses Buches | 29 |
1.9?Die ersten Gehversuche | 30 |
2?Extensible Application Markup Language (XAML) | 36 |
2.1?Trennung von Code und Oberfläche | 36 |
2.2?Serialisierung | 37 |
2.3?Baumstruktur | 38 |
2.4?Namensräume | 41 |
2.5?Eigenschaftselemente | 44 |
2.6?Dependency Properties | 46 |
2.7?Attached Properties | 47 |
2.8?Markup Extensions | 50 |
2.9?Standard-Datentypen | 51 |
2.10?Ereignisse | 52 |
2.11?Automatische Typkonvertierung | 53 |
2.12?Generics | 54 |
2.13?Programmcode | 55 |
2.14?Compiler | 57 |
2.15?Hilfsklassen | 58 |
2.16?Loose XAML | 59 |
3?Layout | 62 |
3.1?Panels für das Layout verwenden | 62 |
3.2?StackPanel | 67 |
3.3?DockPanel | 69 |
3.4?WrapPanel | 72 |
3.5?Grid | 73 |
3.6?UniformGrid | 80 |
3.7?Canvas | 81 |
3.8?VirtualizingStackPanel | 82 |
3.9?Inhalte ausrichten und positionieren | 82 |
3.10?Sichtbarkeit | 88 |
4?Steuerelemente | 90 |
4.1?Eingabeelemente | 91 |
4.1.1?TextBox | 91 |
4.1.2?PasswordBox | 93 |
4.1.3?Button | 93 |
4.1.4?RepeatButton | 95 |
4.1.5?ToggleButton, RadioButton und CheckBox | 95 |
4.2?Auflistungen | 97 |
4.2.1?ListBox | 97 |
4.2.2?ComboBox | 98 |
4.2.3?ListView | 99 |
4.2.4?TreeView | 101 |
4.3?Beschriftungen | 101 |
4.3.1?TextBlock | 101 |
4.3.2?Label | 103 |
4.3.3?Tooltipp | 104 |
4.4?Menüs und Symbolleisten | 105 |
4.4.1?ToolBarTray | 105 |
4.4.2?ToolBar | 106 |
4.4.3?StatusBar | 107 |
4.4.4?Menu | 108 |
4.4.5?Separator | 110 |
4.4.6?ContextMenu | 110 |
4.5?Wertbereiche | 110 |
4.5.1?ProgressBar | 111 |
4.5.2?Slider | 112 |
4.5.3?ScrollBar | 113 |
4.6?Organisation | 113 |
4.6.1?BulletDecorator | 113 |
4.6.2?Border | 114 |
4.6.3?GroupBox | 116 |
4.6.4?Expander | 117 |
4.6.5?Image | 117 |
4.6.6?TabControl | 118 |
4.7?Komplexere Steuerelemente | 120 |
4.7.1?Frame | 120 |
4.7.2?WebBrowser | 121 |
4.7.3?DataGrid | 123 |
4.7.4?RibbonBar | 125 |
5?Anwendungen | 128 |
5.1?Zusammenspiel von Code und XAML | 128 |
5.2?Anwendungsklasse | 129 |
5.2.1?Starten und Beenden einer Anwendung | 129 |
5.2.2?Die Anwendungsklasse erweitern | 132 |
5.2.3?Anwendungsklassen mit XAML definieren | 133 |
5.2.4?Startadresse | 134 |
5.2.5?Splash Screen anzeigen | 134 |
5.3?Fenster | 136 |
5.3.1?Außengrenzen zum Betriebssystem | 137 |
5.3.2?Größe und Position eines Fensters | 137 |
5.3.3?Dialog- und Werkzeugfenster | 139 |
5.3.4?Effektvolle Fenster | 141 |
5.4?Navigierbare Fenster | 143 |
5.4.1?Seiten erstellen | 144 |
5.4.2?Seiten miteinander verknüpfen | 145 |
5.4.3?Frames | 149 |
5.4.4?Dialogseiten mit PageFunction | 152 |
5.5?Ressourcen | 156 |
5.5.1?Orte für die Deklarationen | 159 |
5.5.2?Externe Ressourcen | 162 |
5.5.3?Ressourcen im Programmcode laden | 164 |
5.5.4??Dynamische oder statische Ressourcen? | 165 |
5.6?Ereignisse | 166 |
5.7?Kommandos | 169 |
5.7.1?Routed Commands | 171 |
5.7.2?Unterstützung für Maus und Tastatur | 177 |
5.7.3?Unterstützung im Programmcode | 178 |
5.8?Multithreading | 179 |
5.8.1?Task Parallel Library | 179 |
5.8.2?async- und await-Schlüsselwörter | 183 |
5.8.3?Auflistungen im Nicht-UI-Thread verändern | 184 |
5.9?Das Task-Manager-Syndrom | 185 |
6?Styles | 188 |
6.1?Mit und ohne Styles arbeiten | 189 |
6.2?Explizite Styles definieren | 191 |
6.3?Style Sharing vs. explizite Typen | 195 |
6.4?Styles kaskadieren | 197 |
6.5?Implizite Styles definieren | 200 |
6.6?Explizite und implizite Styles kombinieren | 203 |
6.7?Styles dynamisch zur Laufzeit auswählen | 206 |
6.8?Mit EventSetter auf Ereignisse reagieren | 209 |
6.9?Benutzerinteraktion mittels Trigger | 210 |
6.10?Listen alternieren | 216 |
6.11?Systemvorgaben mit StyleKeys anpassen | 217 |
7?Templates | 220 |
7.1?Templates für Steuerelemente definieren | 222 |
7.2?Eigenschaften berücksichtigen | 225 |
7.3?Inhalte anzeigen | 228 |
7.4?Benutzerinteraktion | 229 |
7.5?Datenbindungen in Templates | 232 |
7.6?Vertragliche Elemente festlegen | 234 |
7.7?Templates für Auflistungen | 235 |
7.8?Vorhandene Templates anpassen | 237 |
7.9?Skins | 238 |
8?Daten und Datenbindungen | 242 |
8.1?Datenzugriff über den Datenkontext | 243 |
8.2?Datenbindungen | 245 |
8.2.1?Einfache Datenbindungen | 245 |
8.2.2?Daten formatieren | 248 |
8.2.3?Bindungsrichtung festlegen | 249 |
8.2.4?Änderungen verfolgen | 251 |
8.2.5?Datenbindungen gruppieren | 254 |
8.2.6?Daten mit Transaktionen bearbeiten | 256 |
8.2.7?Auflistungen und ihre Auswahl | 258 |
8.2.8?Ausweichwert festlegen | 262 |
8.2.9?Statische Eigenschaften | 263 |
8.3?DataTemplates | 264 |
8.3.1?DataTemplates definieren | 265 |
8.3.2?Implizite Data Templates | 268 |
8.3.3?Templates dynamisch zur Laufzeit auswählen | 268 |
8.3.4?Trigger | 270 |
8.3.5?ItemsControl und ContentControl als Alternativen | 272 |
8.4?Daten konvertieren | 274 |
8.5?Mehrfache Datenbindung | 278 |
8.6?Datenquellen | 281 |
8.6.1?Alternativen zum Datenkontext | 281 |
8.6.2?Statische Werte | 283 |
8.6.3?ObjectDataProvider | 283 |
8.6.4?XmlDataProvider | 288 |
8.6.5?Datenquellen direkt anbinden | 293 |
8.7?Langsame Daten | 295 |
8.8?Steuerelemente als Datenquelle nutzen | 299 |
8.8.1?Steuerelemente über den Namen verbinden | 300 |
8.8.2?Relative Bezüge | 302 |
8.9?Navigation | 304 |
8.9.1?Master-/Detail-Ansicht | 304 |
8.9.2?Sortieren | 309 |
8.9.3?Gruppieren | 310 |
8.9.4?Filtern | 312 |
8.9.5?CollectionView | 313 |
8.10?Validierung | 314 |
8.10.1?Validierungsregeln | 314 |
8.10.2?Validierung mehrerer Datenbindungen | 317 |
Validierung mittels Geschäftslogik | 319 |
8.10.4?Position der Validierung festlegen | 321 |
8.10.5?Fehler mit eigenen Templates anzeigen | 322 |
8.11?Diagnostik | 323 |
8.11.1?Ausgabefenster | 323 |
8.11.2?TraceLevel | 324 |
8.11.3?Konverter | 326 |
9?2D-Grafik und Multimedia | 328 |
9.1?Text | 328 |
9.1.1?Schriftart | 328 |
9.1.2?Standardschriftart festlegen | 330 |
9.1.3?Textdarstellung | 333 |
9.2?Pinsel | 334 |
9.2.1?SolidColorBrush | 336 |
9.2.2?GradientBrush | 338 |
9.2.3?TileBrush | 342 |
9.3?Shapes | 349 |
9.4?Linien | 355 |
9.5?Zeichnungen | 359 |
9.5.1?Geometrische Formen | 360 |
9.5.2?Pfade und Pfadsegmente | 365 |
9.5.3?Die Path-Markup-Sprache | 370 |
9.6?Bilder | 372 |
9.6.1?72 vs. 96 DPI | 372 |
9.6.2?Bildquellen | 373 |
9.7?Transparenzen | 376 |
9.7.1?Opacity | 376 |
9.7.2?Maskierungen | 378 |
9.7.3?Ausstanzungen | 379 |
9.4?Transformationen | 380 |
9.8.1?Scale | 383 |
9.8.2?Rotate | 385 |
9.8.3?Skew | 386 |
9.8.4?Translate | 387 |
9.8.5?TransformGroup | 387 |
9.8.6?MatrixTransform | 388 |
9.9?Bitmap-Effekte | 390 |
9.10?Effekte | 390 |
9.10.1?Blur | 391 |
9.10.2?DropShadow | 391 |
9.10.3?Eigene Effekte entwickeln | 391 |
9.11?Multimedia | 394 |
10?3D-Grafik | 398 |
10.1?Konzept | 399 |
10.1.1?Das 3D-Koordinatensystem | 400 |
10.1.2?Kamera | 401 |
10.1.3?Licht | 403 |
10.2?3D-Modelle | 406 |
10.3?Materialien und Texturen | 413 |
10.3.1?Materialien | 413 |
10.3.2?Vorder- und Rückseite | 415 |
10.3.3?Texturen | 416 |
10.4?Transformationen | 419 |
11?Animationen | 424 |
11.1?Eine einfache Animation erstellen | 426 |
11.2?Koordination über Storyboards | 433 |
11.3?Steuerung über Trigger | 438 |
11.4?Schlüsselbildanimationen | 444 |
11.5?Animationen mit Pfaden | 450 |
11.6?Easing | 452 |
11.7?Visual State Manager | 454 |
11.8?Steuerung von Multimedia-Elementen | 458 |
12?Eigene Steuerelemente und XAML-Erweiterungen | 462 |
12.1?Benutzerdefinierte Steuerelemente | 462 |
12.2?Eigenschaften und Ereignisse | 464 |
12.2.1?Dependency Properties erstellen | 465 |
12.2.2?Attached Properties erstellen | 472 |
12.2.3?Routed Events erstellen | 474 |
12.3?Custom Controls | 476 |
12.3.1?FrameworkElement als Basisklasse | 477 |
12.3.2?Control als Basisklasse | 482 |
12.4?XAML-Erweiterungen | 489 |
12.4.1?Namensräume | 489 |
12.4.2?Markup Extensions | 491 |
13?Eingabesteuerung | 494 |
13.1?Tastatur | 494 |
13.1.1?Tastaturfokus | 494 |
13.1.2?Fokussteuerung | 498 |
13.1.3?Eingaben | 500 |
13.1.4?Kommandos | 501 |
13.2?Maus | 501 |
13.2.1?Mauszeiger | 501 |
13.2.2?Eingaben | 503 |
13.2.3?Hit-Testing | 504 |
13.2.4?Kommandos | 505 |
13.3?Drag & Drop | 505 |
13.4?Touchscreen | 509 |
13.4.1?Manipulation | 510 |
13.4.2?Fallstricke | 512 |
14?Interoperabilität | 514 |
14.1?WPF mit Windows Forms | 515 |
14.2?Windows Forms mit WPF | 518 |
14.3?Fenster und ihre Eigentümer | 521 |
14.3.1?WPF öffnet WinForm-Fenster | 521 |
14.3.2?WinForms öffnet WPF-Fenster | 522 |
15?Dokumente und Drucken | 524 |
15.1?Dokumente | 524 |
15.1.1?FlowDocument | 525 |
15.1.2?FixedDocument | 538 |
15.1.3?Steuerelemente | 542 |
15.2?Dokumente mit Anmerkungen versehen | 547 |
15.3?Drucken | 550 |
15.3.1?Visuals drucken | 551 |
15.3.2?Dokumente drucken | 554 |
15.3.3?Seitenweise drucken | 556 |
16?Mehrsprachigkeit | 560 |
16.1?Globalisierung vs. Lokalisierung | 561 |
16.1.1?Globalisierung | 561 |
16.1.2?Lokalisierung | 563 |
16.2?Layout vorbereiten | 564 |
16.3?Oberflächen lokalisieren | 566 |
16.3.1?Standardsprache für das Projekt setzen | 568 |
16.3.2?Attribut setzen | 569 |
16.3.3?Ressource-Dateien anlegen | 569 |
16.3.4?Oberfläche anpassen | 571 |
16.3.5?Sprache auswählen | 573 |
16.4?Programmcode lokalisieren | 573 |
16.5?Enumerationen übersetzen | 574 |
17?Browseranwendungen | 576 |
17.1?Eine XBAP-Anwendung erstellen | 577 |
17.2?Verteilung | 579 |
17.3?Navigation | 580 |
17.4?Sicherheit | 583 |
17.5?Zugriff auf Ressourcen | 592 |
17.6?Webservices | 596 |
17.7?Alternativen | 599 |
18?Model-View-ViewModel-(MVVM-)Entwurfsmuster | 602 |
18.1?Die Mitspieler | 602 |
18.2?Funktionalität mittels Kommandos | 607 |
18.3?Multithreading im ViewModel | 611 |
18.4?Das Henne-Ei-Problem: View oder ViewModel? | 614 |
18.4.1?Zuerst die View | 614 |
18.4.2?Zuerst das ViewModel | 616 |
18.5?Orientierungshilfe | 619 |
18.6?Design-Time-Unterstützung | 621 |
18.7?Grenzen und Nachteile von MVVM | 625 |
18.8?Weitere Schritte | 626 |
19?Anwendungen für Windows 8 | 630 |
19.1?Erste Schritte | 632 |
19.1.1?Projektvorlagen | 633 |
19.1.2?Projektrundflug | 633 |
19.1.3?Entwicklerlizenz | 634 |
19.1.4?Bedienung | 635 |
19.1.5?Blick hinter die Kulissen | 638 |
19.2?Unterschiede | 639 |
19.2.1?Eine Datei auslesen | 640 |
19.3?Steuerelemente | 641 |
19.3.1?FlipView | 641 |
19.3.2?ProgressRing | 643 |
19.3.3?ToggleSwitch | 643 |
19.4?Anwendungsleisten | 643 |
19.5?Animationen | 644 |
19.5.1?Animationsbibliothek | 645 |
19.5.2?Eigene Animationen | 648 |
19.6?Kachel-Informationen | 649 |
19.6.1?Der Startbildschirm | 649 |
19.6.2?Kachel-Information erstellen | 650 |
19.6.3?Badges | 654 |
19.7?Hintergrundaufgaben | 656 |
19.7.1?Eine Hintergrundaufgabe erstellen | 657 |
19.7.2?Anwendungen auf dem Sperrbildschirm | 661 |
19.7.3?Allgemeines | 664 |
19.8?Status der Anwendung speichern | 665 |
19.9?Komponenten | 669 |
20?Installation und Verteilung | 670 |
20.1?XCopy | 671 |
20.2?ClickOnce | 671 |
20.3?Windows Installer XML (WiX) | 675 |
20.4?InstallShield Limited Edition | 680 |
20.5?Nullsoft Scriptable Install System | 682 |
21?Expression Blend | 686 |
21.1?Der erste Start | 686 |
21.2?Werkzeuge | 688 |
21.3?Dokumentenstruktur | 688 |
21.4?Eigenschaften verändern | 689 |
21.5?Ressourcen verwalten | 691 |
21.6?Neue Elemente hinzufügen | 692 |
21.7?Zeichnungen | 694 |
21.8?Animationen | 695 |
Index | 700 |