Windows Presentation Foundation 4.5 - Das umfassende Handbuch zur WPF
von: Thomas Claudius Huber
Galileo Press, 2012
ISBN: 9783836219563
Sprache: Deutsch
1245 Seiten, Download: 19910 KB
Format: PDF, auch als Online-Lesen
Inhalt | 6 | ||
Vorwort | 24 | ||
Hinweise zum Buch | 28 | ||
Kapitel 1 | 42 | ||
Einführung in die WPF | 42 | ||
1.1 Die WPF und das .NET Framework | 42 | ||
1.1.1 Die WPF im .NET Framework 3.0 | 43 | ||
1.1.2 Die WPF und das .NET Framework 3.5 | 43 | ||
1.1.3 Die WPF und das .NET Framework 4.0 | 44 | ||
1.1.4 Die WPF und das .NET Framework 4.5 | 45 | ||
1.1.5 Die WPF als zukünftiges Programmiermodell | 47 | ||
1.1.6 Stärken und Eigenschaften der WPF | 49 | ||
1.1.7 Auf Wiedersehen, GDI+ | 52 | ||
1.2 Von Windows 1.0 zur Windows Presentation Foundation | 52 | ||
1.2.1 Die ersten Wrapper um die Windows-API | 52 | ||
1.2.2 Windows Forms und GDI+ | 53 | ||
1.2.3 Die Windows Presentation Foundation | 54 | ||
1.2.4 Die WPF und Windows 8 | 56 | ||
1.3 Die Architektur der WPF | 57 | ||
1.3.1 MilCore - die »Display Engine« | 59 | ||
1.3.2 WindowsBase | 60 | ||
1.3.3 PresentationCore | 61 | ||
1.3.4 PresentationFramework | 61 | ||
1.3.5 Vorteile und Stärken der WPF-Architektur | 61 | ||
1.4 Konzepte | 63 | ||
1.4.1 XAML | 63 | ||
1.4.2 Dependency Properties | 66 | ||
1.4.3 Routed Events | 69 | ||
1.4.4 Commands | 72 | ||
1.4.5 Styles und Templates | 75 | ||
1.4.6 3D | 76 | ||
1.5 Zusammenfassung | 78 | ||
Kapitel 2 | 80 | ||
Das Programmiermodell | 80 | ||
2.1 Grundlagen der WPF | 81 | ||
2.1.1 Namespaces | 81 | ||
2.1.2 Assemblies | 82 | ||
2.1.3 Die Klassenhierarchie | 82 | ||
2.2 Projektvorlagen in Visual Studio 2012 | 89 | ||
2.2.1 WPF-Anwendung (Windows) | 90 | ||
2.2.2 WPF-Browseranwendung (Web) | 91 | ||
2.2.3 WPF-Benutzersteuerelementbibliothek | 92 | ||
2.2.4 Benutzerdefinierte WPF-Steuerelementbibliothek | 93 | ||
2.3 Windows-Projekte mit Visual Studio 2012 | 94 | ||
2.3.1 Ein Windows-Projekt mit XAML und C# | 95 | ||
2.3.2 Eine reine Codeanwendung (C#) | 108 | ||
2.3.3 Eine reine, kompilierte XAML-Anwendung | 110 | ||
2.3.4 Best Practice | 113 | ||
2.4 Application, Dispatcher und Window | 113 | ||
2.4.1 Die Klasse »Application« | 114 | ||
2.4.2 Die Klasse »Dispatcher« | 121 | ||
2.4.3 Fenster mit der Klasse »Window« | 127 | ||
2.5 Zusammenfassung | 142 | ||
Kapitel 3 | 146 | ||
XAML | 146 | ||
3.1 |
146 | ||
3.2 Elemente und Attribute | 148 | ||
3.3 Namespaces | 150 | ||
3.3.1 Der XML-Namespace der WPF | 151 | ||
3.3.2 Der XML-Namespace für XAML | 153 | ||
3.3.3 Über den Namespace-Alias | 154 | ||
3.3.4 XAML mit eigenen CLR-Namespaces erweitern | 155 | ||
3.4 Properties in XAML setzen | 159 | ||
3.4.1 Die Attribut-Syntax | 159 | ||
3.4.2 Die Property-Element-Syntax | 160 | ||
3.4.3 Die Content-Property (Default-Property) | 162 | ||
3.4.4 Die Attached-Property-Syntax | 163 | ||
3.5 Type-Converter | 164 | ||
3.5.1 Vordefinierte Type-Converter | 165 | ||
3.5.2 Eigene Type-Converter implementieren | 166 | ||
3.5.3 Type-Converter in C# verwenden | 170 | ||
3.6 Markup-Extensions | 172 | ||
3.6.1 Verwenden von Markup-Extensions in XAML und C# | 172 | ||
3.6.2 XAML-Markup-Extensions | 175 | ||
3.6.3 Markup-Extensions der WPF | 176 | ||
3.7 XAML-Spracherweiterungen | 177 | ||
3.8 Collections in XAML | 184 | ||
3.8.1 Collections, die IList implementieren | 184 | ||
3.8.2 Collections, die IDictionary implementieren | 185 | ||
3.9 XamlReader und XamlWriter | 188 | ||
3.9.1 XAML mit XamlReader dynamisch laden | 188 | ||
3.9.2 Objekte mit XamlWriter in XAML serialisieren | 191 | ||
3.10 Zusammenfassung | 192 | ||
Kapitel 4 | 194 | ||
Der Logical und der Visual Tree | 194 | ||
4.1 Zur Veranschaulichung verwendete Komponenten | 197 | ||
4.1.1 Der InfoDialog von FriendStorage | 197 | ||
4.1.2 Die Anwendung »XAMLPadExtensionClone« | 198 | ||
4.2 Der Logical Tree | 199 | ||
4.2.1 Der Logical Tree des InfoDialogs | 200 | ||
4.2.2 Für den Logical Tree verantwortliche Klassen | 204 | ||
4.2.3 Die Klasse LogicalTreeHelper | 207 | ||
4.2.4 NameScopes, FindName und FindLogicalNode | 212 | ||
4.3 Der Visual Tree | 220 | ||
4.3.1 Der Visual Tree des InfoDialogs | 220 | ||
4.3.2 Eigene Klassen im Visual Tree | 223 | ||
4.3.3 Die Klasse »VisualTreeHelper« | 227 | ||
4.3.4 Der Visual Tree und das Rendering | 229 | ||
4.4 Zusammenfassung | 234 | ||
Kapitel 5 | 238 | ||
Controls | 238 | ||
5.1 Die Klasse »Control« | 241 | ||
5.2 ContentControls | 243 | ||
5.2.1 Buttons | 246 | ||
5.2.2 Labels | 253 | ||
5.2.3 ToolTips anzeigen | 255 | ||
5.2.4 Scrollen mit ScrollViewer | 258 | ||
5.2.5 WPF- und HTML-Inhalte mit Frame darstellen | 260 | ||
5.2.6 ContentControls mit Header | 262 | ||
5.3 ItemsControls | 266 | ||
5.3.1 ItemsControls mit Header | 269 | ||
5.3.2 Baumansicht mit der TreeView | 272 | ||
5.3.3 Navigation über Menüs | 277 | ||
5.3.4 Elemente mit einem Selector auswählen | 281 | ||
5.3.5 Das Ribbon | 289 | ||
5.3.6 Eine StatusBar mit Informationen | 293 | ||
5.3.7 »Alternating Rows« mit AlternationCount | 293 | ||
5.4 Controls zur Textdarstellung und -bearbeitung | 295 | ||
5.4.1 »TextBox« zum Editieren von Text | 295 | ||
5.4.2 RichTextBox für formatierten Text | 297 | ||
5.4.3 PasswordBox für maskierten Text | 297 | ||
5.4.4 TextBlock zur Anzeige von Text | 298 | ||
5.4.5 Zeichnen mit dem InkCanvas | 298 | ||
5.5 Datum-Controls | 301 | ||
5.5.1 Calendar | 301 | ||
5.5.2 DatePicker | 304 | ||
5.6 Range-Controls | 305 | ||
5.6.1 Bereich mit Slider auswählen | 306 | ||
5.6.2 ProgressBar zur Statusanzeige | 307 | ||
5.6.3 Scrollen mit der ScrollBar | 308 | ||
5.7 Sonstige, einfachere Controls | 308 | ||
5.7.1 Decorator zum Ausschmücken | 308 | ||
5.7.2 Bilder mit der Image-Klasse darstellen | 310 | ||
5.7.3 Einfaches Popup anzeigen | 311 | ||
5.8 Zusammenfassung | 314 | ||
Kapitel 6 | 316 | ||
Layout | 316 | ||
6.1 Der Layoutprozess | 316 | ||
6.1.1 Die zwei Schritte des Layoutprozesses | 317 | ||
6.1.2 »MeasureOverride« und »ArrangeOverride« | 319 | ||
6.1.3 Ein eigenes Layout-Panel (DiagonalPanel) | 320 | ||
6.1.4 Zusammenfassung des Layoutprozesses | 324 | ||
6.2 Layoutfunktionalität von Elementen | 326 | ||
6.2.1 Width und Height | 326 | ||
6.2.2 Margin und Padding | 327 | ||
6.2.3 Alignments | 329 | ||
6.2.4 Die Visibility-Property | 331 | ||
6.2.5 Die UseLayoutRounding-Property | 332 | ||
6.2.6 Transformationen | 334 | ||
6.3 Panels | 345 | ||
6.3.1 Die Klasse »Panel« | 345 | ||
6.3.2 Canvas | 347 | ||
6.3.3 StackPanel | 350 | ||
6.3.4 WrapPanel | 351 | ||
6.3.5 DockPanel | 352 | ||
6.3.6 Grid | 354 | ||
6.3.7 Primitive Panels | 367 | ||
6.3.8 Übersicht der Alignments in den verschiedenen Panels | 371 | ||
6.3.9 Wenn der Platz im Panel nicht ausreicht | 373 | ||
6.4 Das Layout von FriendStorage | 375 | ||
6.4.1 Das Hauptfenster aus Benutzersicht | 375 | ||
6.4.2 Das Hauptfenster aus Entwicklersicht | 377 | ||
6.4.3 Animation des Freunde-Explorers | 385 | ||
6.5 Zusammenfassung | 390 | ||
Kapitel 7 | 392 | ||
Dependency Properties | 392 | ||
7.1 Die Keyplayer | 393 | ||
7.1.1 »DependencyObject« und »DependencyProperty« | 393 | ||
7.1.2 Was ist die Property Engine? | 395 | ||
7.2 Dependency Properties | 395 | ||
7.2.1 Eine Dependency Property implementieren | 397 | ||
7.2.2 Metadaten einer Dependency Property | 399 | ||
7.2.3 Validieren einer Dependency Property | 406 | ||
7.2.4 Die FontSize-Property als Ziel eines Data Bindings | 408 | ||
7.2.5 Existierende Dependency Properties verwenden | 410 | ||
7.2.6 Read-only-Dependency-Properties implementieren | 413 | ||
7.2.7 Ermittlung des Wertes einer Dependency Property | 415 | ||
7.2.8 Lokal gesetzte Werte löschen | 417 | ||
7.2.9 Überblick über die Quellen mit »DependencyPropertyHelper« | 418 | ||
7.2.10 Auf Änderungen in existierenden Klassen lauschen | 418 | ||
7.3 Attached Properties | 419 | ||
7.3.1 Eine Attached Property implementieren | 420 | ||
7.3.2 Ein einfaches Panel mit Attached Properties | 423 | ||
7.3.3 Bekannte Vertreter | 427 | ||
7.4 Zusammenfassung | 429 | ||
Kapitel 8 | 432 | ||
Routed Events | 432 | ||
8.1 Die Keyplayer | 433 | ||
8.1.1 Die Klassen »RoutedEvent« und »EventManager« | 433 | ||
8.1.2 Die Routing-Strategie | 434 | ||
8.1.3 Das Interface »IInputElement« | 436 | ||
8.1.4 Die Klasse »RoutedEventArgs« | 438 | ||
8.1.5 Das Event System | 439 | ||
8.2 Eigene Routed Events | 440 | ||
8.2.1 Ein Routed Event implementieren | 440 | ||
8.2.2 Das Routed Event als Attached Event verwenden | 444 | ||
8.2.3 Existierende Routed Events in eigenen Klassen nutzen | 446 | ||
8.2.4 Instanz- und Klassenbehandlung | 448 | ||
8.3 Die »RoutedEventArgs« im Detail | 453 | ||
8.3.1 Sender vs. Source und OriginalSource | 453 | ||
8.3.2 Die Handled-Property | 455 | ||
8.4 Routed Events der WPF | 457 | ||
8.4.1 Tastatur-Events | 459 | ||
8.4.2 Maus-Events | 462 | ||
8.4.3 Stylus-Events (Stift) | 466 | ||
8.4.4 Multitouch-Events | 467 | ||
8.4.5 Die statischen Mitglieder eines FrameworkElements | 470 | ||
8.5 Zusammenfassung | 471 | ||
Kapitel 9 | 474 | ||
Commands | 474 | ||
9.1 Die Keyplayer | 475 | ||
9.1.1 Das Interface »ICommand« | 475 | ||
9.1.2 Das Interface »ICommandSource« | 476 | ||
9.2 Eigene Commands mit »ICommand« | 477 | ||
9.2.1 Ein Command implementieren | 477 | ||
9.2.2 Das Command verwenden | 478 | ||
9.2.3 Das Command von der Logik entkoppeln | 479 | ||
9.3 Die »wahren« Keyplayer | 482 | ||
9.3.1 Die Klassen »RoutedCommand« und »RoutedUICommand« | 482 | ||
9.3.2 Der »CommandManager« | 484 | ||
9.3.3 Die Klasse »CommandBinding« | 485 | ||
9.3.4 Elemente mit einer CommandBindings-Property | 486 | ||
9.3.5 Das Zusammenspiel der Keyplayer | 487 | ||
9.4 Eigene Commands mit der Klasse »RoutedUICommand« | 490 | ||
9.4.1 Die eigenen Commands in FriendStorage | 491 | ||
9.4.2 Commands mit »InputGestures« versehen | 492 | ||
9.4.3 CommandBindings zum Window-Objekt hinzufügen | 494 | ||
9.4.4 Die Commands im Menü und in der ToolBar verwenden | 495 | ||
9.5 Built-in-Commands der WPF | 500 | ||
9.5.1 Built-in-Commands in FriendStorage | 501 | ||
9.5.2 Bestehende Commands mit InputBindings auslösen | 503 | ||
9.5.3 Controls mit integrierten CommandBindings | 506 | ||
9.6 Das Model-View-ViewModel-Pattern (MVVM) | 508 | ||
9.6.1 Die Idee des Model-View-Controller-Patterns (MVC) | 509 | ||
9.6.2 Die Idee des Model-View-ViewModel-Patterns (MVVM) | 510 | ||
9.6.3 Ein MVVM-Beispiel | 512 | ||
9.7 Zusammenfassung | 517 | ||
Kapitel 10 | 522 | ||
Ressourcen | 522 | ||
10.1 Logische Ressourcen | 522 | ||
10.1.1 Logische Ressourcen definieren und verwenden | 523 | ||
10.1.2 Die Suche nach Ressourcen im Detail | 526 | ||
10.1.3 Elemente als Ressourcen verwenden | 530 | ||
10.1.4 Statische Ressourcen | 533 | ||
10.1.5 Dynamische Ressourcen | 535 | ||
10.1.6 Ressourcen in separate Dateien auslagern | 539 | ||
10.1.7 Logische Ressourcen in FriendStorage | 542 | ||
10.2 Binäre Ressourcen | 544 | ||
10.2.1 Binäre Ressourcen im .NET Framework | 545 | ||
10.2.2 Binäre Ressourcen bei der WPF | 548 | ||
10.2.3 Die Pack-URI-Syntax | 551 | ||
10.2.4 Auf Dateien im Anwendungsverzeichnis zugreifen | 552 | ||
10.2.5 In C# auf binäre Ressourcen zugreifen | 553 | ||
10.2.6 Lokalisierung von WPF-Anwendungen | 556 | ||
10.2.7 Eine binäre Ressource als Splashscreen | 566 | ||
10.3 Zusammenfassung | 569 | ||
Kapitel 11 | 570 | ||
Styles, Trigger und Templates | 570 | ||
11.1 Styles | 570 | ||
11.1.1 Grundlagen und Keyplayer | 571 | ||
11.1.2 Styles als logische Ressourcen definieren | 574 | ||
11.1.3 Einen Style für verschiedene Typen verwenden | 577 | ||
11.1.4 Bestehende Styles erweitern | 580 | ||
11.1.5 Setter und EventSetter | 582 | ||
11.1.6 Styles und Trigger | 585 | ||
11.2 Trigger | 585 | ||
11.2.1 Property-Trigger | 586 | ||
11.2.2 DataTrigger | 591 | ||
11.2.3 EventTrigger | 592 | ||
11.2.4 Komplexe Bedingungen mit Triggern | 597 | ||
11.3 Templates | 599 | ||
11.3.1 Arten von Templates | 600 | ||
11.3.2 Layout mit dem ItemsPanelTemplate | 601 | ||
11.3.3 Daten mit DataTemplates visualisieren | 602 | ||
11.3.4 Das Aussehen von Controls mit ControlTemplates anpassen | 606 | ||
11.3.5 Das Default-ControlTemplate eines Controls | 609 | ||
11.3.6 Die Verbindung zwischen Control und Template | 613 | ||
11.3.7 Two-Way-Contract zwischen Control und Template | 616 | ||
11.3.8 VisualStateManager statt Trigger verwenden | 621 | ||
11.3.9 Templates in C# | 631 | ||
11.4 Styles, Trigger & Templates in FriendStorage | 633 | ||
11.4.1 Der Next-Button | 633 | ||
11.4.2 Die Image-Objekte der Toolbar-Buttons | 635 | ||
11.4.3 Die DataGridRows des Freunde-Explorers | 637 | ||
11.5 Zusammenfassung | 639 | ||
Kapitel 12 | 642 | ||
Daten | 642 | ||
12.1 Data Binding | 643 | ||
12.1.1 Data Binding in XAML | 643 | ||
12.1.2 Data Binding in C# | 643 | ||
12.1.3 Die Binding-Klasse im Detail | 645 | ||
12.1.4 Der DataContext | 648 | ||
12.1.5 Die Path-Property im Detail | 650 | ||
12.1.6 Die Richtung des Bindings | 652 | ||
12.1.7 Der UpdateSourceTrigger | 654 | ||
12.1.8 Die Delay-Property des Bindings | 655 | ||
12.1.9 Die BindingExpression | 656 | ||
12.1.10 Bindings entfernen | 658 | ||
12.1.11 Debugging von Data Bindings | 658 | ||
12.2 Datenquellen eines Data Bindings | 660 | ||
12.2.1 Binding an die Dependency Properties eines Elements | 661 | ||
12.2.2 Binding an einfache .NET-Properties | 661 | ||
12.2.3 Binding an statische Properties | 665 | ||
12.2.4 Binding an logische Ressourcen | 667 | ||
12.2.5 Binding an Quellen unterschiedlichen Typs | 668 | ||
12.2.6 Binding an relative Quellen mit »RelativeSource« | 671 | ||
12.2.7 Binding der Target-Property an mehrere Quellen | 674 | ||
12.2.8 DataSourceProvider für Objekte und XML | 678 | ||
12.2.9 Binding an XLinq | 685 | ||
12.3 Data Binding an Collections | 686 | ||
12.3.1 Der Fallback-Mechanismus | 686 | ||
12.3.2 Die CollectionViews der WPF | 689 | ||
12.3.3 Die DefaultView | 693 | ||
12.3.4 Daten filtern, sortieren und gruppieren | 695 | ||
12.3.5 »Live Shaping« von Daten | 701 | ||
12.3.6 Hinzufügen und Löschen von Daten | 702 | ||
12.3.7 Collections auf Worker-Threads bearbeiten | 704 | ||
12.3.8 Mehrere Collections als Datenquelle verwenden | 705 | ||
12.3.9 Binding an ein ADO.NET-DataSet | 706 | ||
12.4 Benutzereingaben validieren | 709 | ||
12.4.1 Validieren mit »ExceptionValidationRule« | 711 | ||
12.4.2 Validieren mit »DataErrorValidationRule« | 713 | ||
12.4.3 Validieren mit »NotifyDataErrorValidationRule« | 714 | ||
12.4.4 Validieren mit eigener ValidationRule | 717 | ||
12.4.5 Die Validation-Klasse | 719 | ||
12.4.6 Validieren mehrerer Bindings mit »BindingGroup« | 721 | ||
12.5 Das DataGrid | 730 | ||
12.5.1 Die verwendeten Testdaten | 731 | ||
12.5.2 Autogenerieren von Columns | 732 | ||
12.5.3 Unterschiedliche Column-Typen | 735 | ||
12.5.4 Columns manuell zum DataGrid hinzufügen | 737 | ||
12.5.5 Die Breite einer Column | 739 | ||
12.5.6 Columns mit der Klasse »DataGridTemplateColumn« | 741 | ||
12.5.7 RowDetails anzeigen | 743 | ||
12.5.8 Daten gruppieren | 744 | ||
12.5.9 Die Auswahlmöglichkeiten festlegen | 746 | ||
12.5.10 Auf ausgewählte Daten zugreifen | 747 | ||
12.5.11 Bearbeiten von Daten | 748 | ||
12.5.12 Daten im DataGrid validieren | 749 | ||
12.5.13 Sonstige Eigenschaften des DataGrids | 753 | ||
12.6 Daten mit DataTemplates visualisieren | 754 | ||
12.6.1 Auswahl mit der Klasse »DataTemplateSelector« | 754 | ||
12.6.2 Hierarchische DataTemplates | 756 | ||
12.7 Drag & Drop | 759 | ||
12.8 Daten in FriendStorage | 763 | ||
12.8.1 Die Entitäten »Friend«, »Address« und »FriendCollection« | 763 | ||
12.8.2 Daten im MainWindow | 764 | ||
12.8.3 Daten im NewFriendDialog | 773 | ||
12.8.4 Speichern in gezippter .friends-Datei | 776 | ||
12.9 Zusammenfassung | 777 | ||
Kapitel 13 | 782 | ||
2D-Grafik | 782 | ||
13.1 Shapes | 783 | ||
13.1.1 Das Rectangle | 784 | ||
13.1.2 Die Ellipse | 785 | ||
13.1.3 Linien mit »Line« und »Polyline« | 785 | ||
13.1.4 Spezielle Formen mit »Polygon« | 787 | ||
13.1.5 Ein Außerirdischer aus Shapes | 790 | ||
13.1.6 Die StrokeXXX-Properties der Shape-Klasse | 791 | ||
13.1.7 Komplexe Shapes mit »Path« | 795 | ||
13.2 Geometries | 795 | ||
13.2.1 »RectangleGeometry« und »EllipseGeometry« | 796 | ||
13.2.2 »LineGeometry« | 798 | ||
13.2.3 Mehrere Geometry-Objekte gruppieren | 798 | ||
13.2.4 Geometries kombinieren | 799 | ||
13.2.5 Komplexe Formen mit »PathGeometry« | 800 | ||
13.2.6 Die Klasse »StreamGeometry« | 803 | ||
13.2.7 Die Path-Markup-Syntax | 804 | ||
13.2.8 Clipping mit Geometry-Objekten | 806 | ||
13.3 Drawings | 807 | ||
13.3.1 »GeometryDrawing« und »DrawingGroup« | 807 | ||
13.3.2 »ImageDrawing« und »VideoDrawing« | 809 | ||
13.3.3 Ein Außerirdischer aus Geometries und Drawings | 810 | ||
13.4 Programmierung des Visual Layers | 813 | ||
13.4.1 Die Klasse »DrawingContext« | 813 | ||
13.4.2 DrawingVisual einsetzen | 815 | ||
13.4.3 Visual-Hit-Testing | 817 | ||
13.5 Brushes | 818 | ||
13.5.1 Der »SolidColorBrush« und die Color-Struktur | 819 | ||
13.5.2 Farbverläufe mit GradientBrushes | 821 | ||
13.5.3 TileBrushes | 825 | ||
13.6 Cached Compositions | 831 | ||
13.6.1 BitmapCache für ein Element aktivieren | 831 | ||
13.6.2 Nebeneffekte des Cachings | 832 | ||
13.6.3 Elemente mit »BitmapCacheBrush« zeichnen | 835 | ||
13.7 Effekte | 837 | ||
13.7.1 Die Effect-Klassen | 838 | ||
13.7.2 »Blur« und »DropShadow« verwenden | 838 | ||
13.7.3 Properties von »BlurEffect« und »DropShadowEffect« | 840 | ||
13.7.4 Effekte mit eigenen Pixelshadern | 840 | ||
13.7.5 Pixelshader mit weiteren Konstanten | 849 | ||
13.8 Bitmaps | 852 | ||
13.8.1 BitmapSources - Bildquellen | 852 | ||
13.8.2 Bitmap-Operationen | 854 | ||
13.8.3 Bitmap-Operationen in FriendStorage | 854 | ||
13.9 Zusammenfassung | 855 | ||
Kapitel 14 | 858 | ||
3D-Grafik | 858 | ||
14.1 3D im Überblick | 859 | ||
14.1.1 Inhalte einer 3D-Szene | 859 | ||
14.1.2 2D und 3D im Vergleich | 860 | ||
14.2 Die Objekte einer 3D-Szene im Detail | 862 | ||
14.2.1 Das 3D-Koordinatensystem | 862 | ||
14.2.2 Der Viewport3D als Fernseher | 863 | ||
14.2.3 Die richtige Kamera | 864 | ||
14.2.4 Visual3D-Objekte | 868 | ||
14.2.5 Model3D-Objekte | 870 | ||
14.2.6 »GeometryModel3D« aufbauen | 871 | ||
14.2.7 Licht ins Dunkel bringen | 877 | ||
14.2.8 Transformationen | 880 | ||
14.2.9 Verschiedene Materialien | 882 | ||
14.2.10 Texturen | 884 | ||
14.2.11 Normalen | 887 | ||
14.3 Benutzerinteraktion mit 3D-Objekten | 891 | ||
14.3.1 Interaktivität in WPF 3.0 mit Visual-Hit-Testing | 891 | ||
14.3.2 Interaktivität in WPF 3.5 mit »UIElement3D« | 892 | ||
14.3.3 Interaktive 2D-Elemente auf 3D-Objekten in WPF 3.5 | 895 | ||
14.4 Komplexe 3D-Objekte | 896 | ||
14.4.1 Landschaft im Code generieren | 897 | ||
14.4.2 Kugel erstellen | 898 | ||
14.4.3 Komplexe 3D-Objekte mit Third-Party-Tools erstellen | 900 | ||
14.5 Zusammenfassung | 901 | ||
Kapitel 15 | 904 | ||
Animationen | 904 | ||
15.1 Animationsgrundlagen | 905 | ||
15.1.1 Voraussetzungen für Animationen | 905 | ||
15.1.2 Übersicht über die Animationsarten und -klassen | 906 | ||
15.1.3 Timelines und Clocks | 909 | ||
15.1.4 Das Interface »IAnimatable« | 911 | ||
15.2 Basis-Animationen in C# | 913 | ||
15.2.1 Start- und Zielwert mit »From«, »To« und »By« | 913 | ||
15.2.2 Dauer, Startzeit und Geschwindigkeit | 917 | ||
15.2.3 Rückwärts und Wiederholen | 919 | ||
15.2.4 Die Gesamtlänge einer Timeline | 920 | ||
15.2.5 Wiederholen mit neuen Werten | 921 | ||
15.2.6 Beschleunigen und Abbremsen | 922 | ||
15.2.7 Das Füllverhalten einer Animation | 924 | ||
15.2.8 Eine Animation mit »AnimationClock« steuern | 925 | ||
15.2.9 Animationen in FriendStorage | 929 | ||
15.3 Basis-Animationen in XAML | 931 | ||
15.3.1 Eine einfache Animation in XAML | 933 | ||
15.3.2 Das Storyboard als Timeline-Container | 937 | ||
15.3.3 Animationen mit »ControllableStoryboard« steuern | 939 | ||
15.4 Keyframe-Animationen | 941 | ||
15.4.1 Lineare Keyframe-Animationen | 943 | ||
15.4.2 SplineKeyframe-Animationen | 945 | ||
15.4.3 Animationen mit diskreten Keyframes | 946 | ||
15.5 Pfad-Animationen | 950 | ||
15.6 Easing Functions | 952 | ||
15.6.1 Grundlagen der Easing Functions | 952 | ||
15.6.2 Easing Functions in Basis-Animationen | 956 | ||
15.6.3 Easing Functions in Keyframe-Animationen | 958 | ||
15.6.4 Eigene Easing Functions erstellen | 960 | ||
15.7 Low-Level-Animationen | 962 | ||
15.8 Zusammenfassung | 965 | ||
Kapitel 16 | 968 | ||
Audio und Video | 968 | ||
16.1 Audio (.wav) mit »SoundPlayerAction« und »SoundPlayer« | 968 | ||
16.1.1 Audio mit »SoundPlayerAction« (XAML) | 969 | ||
16.1.2 Audio mit »SoundPlayer« (C#) | 970 | ||
16.2 Audio und Video mit »MediaPlayer« (C#) | 972 | ||
16.2.1 Einfaches Abspielen | 972 | ||
16.2.2 Steuerung mit »MediaClock« und »MediaTimeline« | 975 | ||
16.3 Audio und Video mit »MediaElement« (XAML) | 978 | ||
16.3.1 Einfaches Abspielen | 979 | ||
16.3.2 Steuerung mit Methoden (unabhängiger Modus) | 980 | ||
16.3.3 Steuerung mit »MediaTimeline« (Clock-Modus) | 981 | ||
16.3.4 Storyboard mit »MediaTimeline« und »AnimationTimeline« | 983 | ||
16.3.5 Snapshots von Videos | 985 | ||
16.4 Zusammenfassung | 988 | ||
Kapitel 17 | 990 | ||
Eigene Controls | 990 | ||
17.1 Custom Controls | 991 | ||
17.1.1 Die Struktur eines Custom Controls | 992 | ||
17.1.2 Der zu erstellende VideoPlayer | 995 | ||
17.1.3 Klassenname anpassen | 995 | ||
17.1.4 Template-Parts definieren | 997 | ||
17.1.5 Dependency Properties erstellen | 1000 | ||
17.1.6 Routed Events implementieren | 1003 | ||
17.1.7 Commands unterstützen | 1004 | ||
17.1.8 Das Aussehen des lookless Controls festlegen | 1008 | ||
17.1.9 Das Control testen | 1012 | ||
17.1.10 Optional weitere Theme-Styles anlegen | 1014 | ||
17.1.11 Templates auf Windows-Ebene definieren | 1017 | ||
17.2 Custom Control mit Visual States | 1021 | ||
17.2.1 Visual States im Code implementieren | 1021 | ||
17.2.2 States für andere sichtbar machen | 1024 | ||
17.2.3 States im Default-ControlTemplate unterstützen | 1025 | ||
17.2.4 Den VideoPlayer mit Visual States testen | 1026 | ||
17.3 User Control | 1027 | ||
17.3.1 Die Struktur eines User Controls | 1028 | ||
17.3.2 Das zu erstellende PrintableFriend-Control | 1029 | ||
17.3.3 UI des Controls definieren | 1030 | ||
17.3.4 Properties in der Codebehind-Datei erstellen | 1031 | ||
17.3.5 Die Content-Property festlegen | 1033 | ||
17.4 Alternativen zu Custom Control und User Control | 1034 | ||
17.4.1 Wann sollte man die OnRender-Methode überschreiben? | 1034 | ||
17.4.2 Adorner erstellen und Elemente damit ausschmücken | 1035 | ||
17.5 Zusammenfassung | 1040 | ||
Kapitel 18 | 1042 | ||
Text und Dokumente | 1042 | ||
18.1 Text | 1043 | ||
18.1.1 »FrameworkContentElement« als Basis für Text | 1043 | ||
18.1.2 Formatierung mit Spans | 1045 | ||
18.1.3 Formatierung mit den Properties aus »TextElement« | 1047 | ||
18.1.4 Elemente im Text mit »InlineUIContainer« | 1049 | ||
18.1.5 Fonts und Typefaces | 1050 | ||
18.1.6 Typografie | 1051 | ||
18.1.7 Die FormattedText-Klasse | 1052 | ||
18.1.8 Texteffekte | 1054 | ||
18.1.9 Nützliche Eigenschaften der TextBlock-Klasse | 1055 | ||
18.2 Das Text-Rendering beeinflussen | 1057 | ||
18.2.1 Kleine Zeichen sind schlecht lesbar | 1058 | ||
18.2.2 Die Schrift führt beim Animieren zu Performance-Problemen | 1059 | ||
18.2.3 Der Algorithmus für das Anti-Aliasing lässt sich nicht festlegen | 1059 | ||
18.2.4 Der ClearType-Algorithmus greift nicht immer | 1060 | ||
18.3 Flow-Dokumente | 1062 | ||
18.3.1 Die Klasse »FlowDocument« | 1062 | ||
18.3.2 Die fünf Block-Arten | 1064 | ||
18.3.3 Die AnchoredBlocks »Figure« und »Floater« | 1068 | ||
18.3.4 Controls zum Betrachten | 1071 | ||
18.4 Annotationen | 1073 | ||
18.5 XPS-Dokumente (Fixed-Dokumente) | 1077 | ||
18.5.1 FlowDocument als XPS speichern | 1078 | ||
18.5.2 Ein XPS-Dokument laden und anzeigen | 1082 | ||
18.5.3 Die Inhalte eines XPS-Dokuments | 1083 | ||
18.5.4 XPS in C# mit FixedDocument & Co. erstellen | 1087 | ||
18.6 Drucken | 1088 | ||
18.6.1 Einfaches Ausdrucken | 1089 | ||
18.6.2 Drucken mit »PrintQueue« | 1091 | ||
18.6.3 Festlegen von Druckeigenschaften mit »PrintTicket« | 1091 | ||
18.6.4 Drucken mit »PrintDialog« | 1092 | ||
18.7 Dokumente in FriendStorage | 1093 | ||
18.7.1 Hilfe mit Flow-Dokument | 1093 | ||
18.7.2 Export der Freundesliste als XPS | 1095 | ||
18.7.3 Drucken der Freundesliste | 1099 | ||
18.8 Zusammenfassung | 1099 | ||
Kapitel 19 | 1104 | ||
Windows, Navigation und XBAP | 1104 | ||
19.1 Windows-Anwendungen | 1105 | ||
19.1.1 Built-in-Dialoge | 1105 | ||
19.1.2 Anwendungen mit UI Automation automatisieren | 1107 | ||
19.1.3 Deployment | 1122 | ||
19.2 Windows-Anwendungen und die Windows Taskbar | 1123 | ||
19.2.1 Übersicht der Möglichkeiten | 1124 | ||
19.2.2 Thumb-Buttons im Vorschaufenster | 1125 | ||
19.2.3 Ein Overlay-Bild auf dem Taskbar-Button | 1128 | ||
19.2.4 Eine Fortschrittsanzeige auf dem Taskbar-Button | 1130 | ||
19.2.5 Den Ausschnitt im Thumbnail festlegen | 1131 | ||
19.2.6 Eine JumpList mit JumpTasks | 1133 | ||
19.2.7 JumpList mit JumpTasks und JumpPaths | 1134 | ||
19.2.8 JumpList mit letzten und häufigen Elementen | 1136 | ||
19.3 Navigationsanwendungen | 1137 | ||
19.3.1 Container für eine Page | 1138 | ||
19.3.2 Navigation zu einer Seite/Page | 1142 | ||
19.3.3 Navigation-Events | 1148 | ||
19.3.4 Daten übergeben | 1150 | ||
19.3.5 Daten mittels PageFunction zurückgeben | 1154 | ||
19.4 XBAP-Anwendungen | 1157 | ||
19.4.1 FriendViewer als XBAP erstellen | 1158 | ||
19.4.2 Generierte Dateien | 1160 | ||
19.4.3 XBAP vs. Loose XAML | 1161 | ||
19.4.4 XBAP vs. Silverlight | 1161 | ||
19.5 Zusammenfassung | 1162 | ||
Kapitel 20 | 1164 | ||
Interoperabilität | 1164 | ||
20.1 Unterstützte Szenarien und Grenzen | 1164 | ||
20.1.1 Mögliche Interoperabilitätsszenarien | 1165 | ||
20.1.2 Grenzen und Einschränkungen | 1166 | ||
20.2 Windows Forms | 1167 | ||
20.2.1 Windows Forms in WPF | 1167 | ||
20.2.2 WPF in Windows Forms | 1175 | ||
20.2.3 Dialoge | 1177 | ||
20.3 ActiveX in WPF | 1179 | ||
20.4 Win32 | 1182 | ||
20.4.1 Win32 in WPF | 1182 | ||
20.4.2 WPF in Win32 | 1192 | ||
20.4.3 Dialoge | 1196 | ||
20.4.4 Win32-Nachrichten in WPF abfangen | 1201 | ||
20.5 Direct3D in WPF | 1203 | ||
20.5.1 Voraussetzungen und Konfiguration | 1204 | ||
20.5.2 Die Direct3D-Oberfläche integrieren | 1205 | ||
20.6 Zusammenfassung | 1208 | ||
Index | 1210 |