Tải bản đầy đủ (.pdf) (1,201 trang)

Tài liệu Pro WPF in C# 2010 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (14.74 MB, 1,201 trang )


Pro WPF in C# 2010:
Windows Presentation Foundation in
.NET 4.0












■ ■ ■
Matthew MacDonald

CONTENTS

ii
Pro WPF in C# 2010: Windows Presentation Foundation in .NET 4.0
Copyright © 2010 by Matthew MacDonald
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording, or by any information
storage or retrieval system, without the prior written permission of the copyright owner and the
publisher.
ISBN-13 (pbk): 978-1-4302-7205-2
ISBN-13 (electronic): 978-1-4302-7204-5


Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every
occurrence of a trademarked name, we use the names only in an editorial fashion and to the
benefit of the trademark owner, with no intention of infringement of the trademark.
Publisher and President: Paul Manning
Lead Editor: Ewan Buckingham
Technical Reviewer: Fabio Claudio Ferracchiati
Editorial Board: Clay Andres, Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell,
Jonathan Gennick, Jonathan Hassell, Michelle Lowman, Matthew Moodie, Duncan Parkes,
Jeffrey Pepper, Frank Pohlmann, Douglas Pundick, Ben Renow-Clarke, Dominic
Shakeshaft, Matt Wade, Tom Welsh
Project Manager: Anne Collett
Copy Editor: Marilyn Smith and Kim Wimpsett
Compositor: ContentWorks, Inc. and Bob Cooper
Indexer: BIM Indexing & Proofreading Services
Artist: April Milne
Cover Designer: Anna Ishchenko
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th
Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail orders-ny@springer-
sbm.com, or visit www.springeronline.com.
For information on translations, please e-mail , or visit www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional
use. eBook versions and licenses are also available for most titles. For more information, reference
our Special Bulk Sales—eBook Licensing web page at www.apress.com/info/bulksales.
The information in this book is distributed on an “as is” basis, without warranty. Although every
precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall
have any liability to any person or entity with respect to any loss or damage caused or alleged to be
caused directly or indirectly by the information contained in this work.
The source code for this book is available to readers at www.apress.com. You will need to answer
questions pertaining to this book in order to successfully download the code.




CONTENTS

iii


For my wonderful family,
Faria, Maya, and Brenna



CONTENTS

i
v

Contents
■Chapter 1: Introducing WPF 1
The Evolution of Windows Graphics 1

DirectX: The New Graphics Engine 2
Hardware Acceleration and WPF 3
WPF: A Higher-Level API 4
Windows Forms Lives On 6
DirectX Also Lives On 6
Silverlight 6
Resolution Independence 7
WPF Units 8

System DPI 9
Bitmap and Vector Graphics 12
The Architecture of WPF 12
The Class Hierarchy 14
WPF 4 17
New Features 17
The WPF Toolkit 18
Visual Studio 2010 18
The Last Word 21
■Chapter 2: XAML 23
Understanding XAML 24

Graphical User Interfaces Before WPF 24
The Variants of XAML 25
XAML Compilation 26
XAML Basics 27
XAML Namespaces 28

CONTENTS

v
The Code-Behind Class 30
Properties and Events in XAML 32
Simple Properties and Type Converters 34
Complex Properties 35
Markup Extensions 37
Attached Properties 38
Nesting Elements 39
Special Characters and Whitespace 42
Events 44

The Full Eight Ball Example 45
Using Types from Other Namespaces 46
Loading and Compiling XAML 48
Code-Only 48
Code and Uncompiled XAML 51
Code and Compiled XAML 53
XAML Only 55
XAML 2009 56
Automatic Event Hookup 56
References 58
Built-in Types 58
Advanced Object Creation 59
The Last Word 60
■Chapter 3: Layout 61
Understanding Layout in WPF 61

The WPF Layout Philosophy 62
The Layout Process 63
The Layout Containers 63
Simple Layout with the StackPanel 65
Layout Properties 67
Alignment 68
Margin 69
Minimum, Maximum, and Explicit Sizes 71

CONTENTS

vi
The Border 74
The WrapPanel and DockPanel 75

The WrapPanel 76
The DockPanel 77
Nesting Layout Containers 79
The Grid 80
Fine-Tuning Rows and Columns 83
Layout Rounding 85
Spanning Rows and Columns 86
Split Windows 87
Shared Size Groups 91
The UniformGrid 93
Coordinate-Based Layout with the Canvas 94
Z-Order 95
The InkCanvas 96
Layout Examples 99
A Column of Settings 99
Dynamic Content 100
A Modular User Interface 102
The Last Word 104
■Chapter 4: Dependency Properties 105
Understanding Dependency Properties 105

Defining a Dependency Property 106
Registering a Dependency Property 107
Adding a Property Wrapper 109
How WPF Uses Dependency Properties 110
Shared Dependency Properties 111
Attached Dependency Properties 112
Property Validation 114
The Validation Callback 114
The Coercion Callback 115

The Last Word 118

CONTENTS

vii
■Chapter 5: Routed Events 119
Understanding Routed Events 119

Defining, Registering, and Wrapping a Routed Event 120
Sharing Routed Events 121
Raising a Routed Event 121
Handling a Routed Event 121
Event Routing 123
The RoutedEventArgs Class 125
Bubbling Events 126
Handling a Suppressed Event 129
Attached Events 129
Tunneling Events 131
WPF Events 133
Lifetime Events 133
Input Events 136
Keyboard Input 137
Handling a Key Press 138
Focus 140
Getting Key State 141
Mouse Input 143
Mouse Clicks 144
Capturing the Mouse 146
Drag-and-Drop 146
Multitouch Input 149

The Levels of Multitouch Support 150
Raw Touch 150
Manipulation 153
Inertia 156
The Last Word 157
■Chapter 6: Controls 159
The Control Class 160

Background and Foreground Brushes 160

CONTENTS

viii
Fonts 163
Mouse Cursors 168
Content Controls 169
The Content Property 171
Aligning Content 173
The WPF Content Philosophy 174
Labels 175
Buttons 177
Tooltips 180
Specialized Containers 188
The ScrollViewer 188
Headered Content Controls 192
The GroupBox 192
The TabItem 193
The Expander 195
Text Controls 197
Multiple Lines of Text 198

Text Selection 199
Spell Checking 200
The PasswordBox 202
List Controls 202
The ListBox 203
The ComboBox 206
Range-Based Controls 207
The Slider 208
The ProgressBar 209
Date Controls 210
The Last Word 213
■Chapter 7: The Application 215
The Application Life Cycle 215

Creating an Application Object 216
Deriving a Custom Application Class 217

CONTENTS

i
x
Application Shutdown 218
Application Events 220
Application Tasks 222
Showing a Splash Screen 222
Handling Command-Line Arguments 223
Accessing the Current Application 224
Interacting Between Windows 225
Single-Instance Applications 227
Assembly Resources 234

Adding Resources 234
Retrieving Resources 236
Pack URIs 237
Content Files 239
Localization 239
Building Localizable User Interfaces 240
Preparing an Application for Localization 241
The Translation Process 242
The Last Word 248
■Chapter 8: Element Binding 249
Binding Elements Together 249

The Binding Expression 250
Binding Errors 251
Binding Modes 251
Creating Bindings with Code 254
Multiple Bindings 255
Binding Updates 259
Binding to Objects That Aren’t Elements 260
Source 261
RelativeSource 261
DataContext 263
The Last Word 264


CONTENTS

x
■Chapter 9: Commands 265
Understanding Commands 265


The WPF Command Model 267
The ICommand Interface 267
The RoutedCommand Class 268
The RoutedUICommand Class 269
The Command Library 269
Executing Commands 271
Command Sources 271
Command Bindings 272
Using Multiple Command Sources 275
Fine-Tuning Command Text 276
Invoking a Command Directly 276
Disabling Commands 277
Controls with Built-in Commands 280
Advanced Commands 282
Custom Commands 282
Using the Same Command in Different Places 284
Using a Command Parameter 286
Tracking and Reversing Commands 286
The Last Word 291
■Chapter 10: Resources 293
Resource Basics 293

The Resources Collection 294
The Hierarchy of Resources 295
Static and Dynamic Resources 297
Nonshared Resources 299
Accessing Resources in Code 299
Application Resources 300
System Resources 301

Resource Dictionaries 302
Creating a Resource Dictionary 302

CONTENTS

xi
Using a Resource Dictionary 303
Sharing Resources Between Assemblies 304
The Last Word 307
■Chapter 11: Styles and Behaviors 309
Style Basics 309

Creating a Style Object 313
Setting Properties 314
Attaching Event Handlers 316
The Many Layers of Styles 317
Automatically Applying Styles by Type 319
Triggers 320
A Simple Trigger 321
An Event Trigger 323
Behaviors 325
Getting Support for Behaviors 325
Understanding the Behavior Model 326
Creating a Behavior 327
Using a Behavior 329
Design-Time Behavior Support in Blend 330
The Last Word 331
■Chapter 12: Shapes, Brushes, and Transforms 333
Understanding Shapes 333


The Shape Classes 334
Rectangle and Ellipse 337
Sizing and Placing Shapes 338
Scaling Shapes with a Viewbox 341
Line 343
Polyline 344
Polygon 345
Line Caps and Line Joins 348
Dashes 349
Pixel Snapping 351

CONTENTS

xii
Brushes 352
The SolidColorBrush 353
The LinearGradientBrush 354
The RadialGradientBrush 356
The ImageBrush 358
A Tiled ImageBrush 360
The VisualBrush 363
The BitmapCacheBrush 364
Transforms 365
Transforming Shapes 367
Transforming Elements 369
Transparency 370
Making an Element Partially Transparent 370
Opacity Masks 372
The Last Word 374
■Chapter 13: Geometries and Drawings 375

Paths and Geometries 375

Line, Rectangle, and Ellipse Geometries 376
Combining Shapes with GeometryGroup 377
Fusing Geometries with CombinedGeometry 379
Curves and Lines with PathGeometry 383
The Geometry Mini-Language 388
Clipping with Geometry 391
Drawings 392
Displaying a Drawing 394
Exporting Clip Art 396
The Last Word 398
■Chapter 14: Effects and Visuals 399
Visuals 399

Drawing Visuals 400
Wrapping Visuals in an Element 402
Hit Testing 405

CONTENTS

xiii
Complex Hit Testing 408
Effects 411
BlurEffect 412
DropShadowEffect 413
ShaderEffect 414
The WriteableBitmap Class 416
Generating a Bitmap 416
Writing to a WriteableBitmap 417

More Efficient Pixel Writing 419
The Last Word 422
■Chapter 15: Animation Basics 423
Understanding WPF Animation 423

Timer-Based Animation 424
Property-Based Animation 425
Basic Animation 426
The Animation Classes 426
Animations in Code 429
Simultaneous Animations 434
Animation Lifetime 434
The Timeline Class 436
Storyboards 439
The Storyboard 440
Event Triggers 440
Overlapping Animations 443
Synchronized Animations 444
Controlling Playback 445
Monitoring Progress 450
Animation Easing 452
Using an Easing Function 452
Easing In and Easing Out 453
Easing Function Classes 455
Creating a Custom Easing Function 458

CONTENTS

xi
v


Animation Performance 460
Desired Frame Rate 460
Bitmap Caching 463
The Last Word 465
■Chapter 16: Advanced Animation 467
Animation Types Revisited 467

Animating Transforms 468
Animating Brushes 472
Animating Pixel Shaders 475
Key Frame Animation 477
Discrete Key Frame Animations 478
Easing Key Frames 479
Spline Key Frame Animations 480
Path-Based Animation 481
Frame-Based Animation 483
Storyboards in Code 487
The Main Window 488
The Bomb User Control 490
Dropping the Bombs 491
Intercepting a Bomb 494
Counting Bombs and Cleaning Up 496
The Last Word 498
■Chapter 17: Control Templates 499
Understanding Logical Trees and Visual Trees 500

Understanding Templates 506
The Chrome Classes 509
Dissecting Controls 510

Creating Control Templates 513
A Simple Button 514
Template Bindings 515
Triggers That Change Properties 517
Triggers That Use Animation 520

CONTENTS

x
v
Organizing Template Resources 521
Refactoring the Button Control Template 522
Applying Templates with Styles 524
Applying Templates Automatically 527
User-Selected Skins 528
Building More Complex Templates 530
Nested Templates 531
Modifying the Scroll Bar 533
The Control Template Examples 538
Visual States 540
The Last Word 541
■Chapter 18: Custom Elements 543
Understanding Custom Elements in WPF 544

Building a Basic User Control 547
Defining Dependency Properties 548
Defining Routed Events 551
Adding Markup 552
Using the Control 554
Command Support 555

A Closer Look at User Controls 558
Creating a Lookless Control 559
Refactoring the Color Picker Code 560
Refactoring the Color Picker Markup 560
Streamlining the Control Template 563
Theme-Specific Styles and the Default Style 566
Supporting Visual States 568
Starting the FlipPanel Class 569
Choosing Parts and States 572
The Default Control Template 573
Using the FlipPanel 580
Using a Different Control Template 581
Custom Panels 582

CONTENTS

xvi
The Two-Step Layout Process 583
The Canvas Clone 586
A Better Wrapping Panel 587
Custom-Drawn Elements 590
The OnRender() Method 591
Evaluating Custom Drawing 592
A Custom-Drawn Element 593
A Custom Decorator 595
The Last Word 597
■Chapter 19: Data Binding 599
Binding to a Database with Custom Objects 599

Building a Data Access Component 600

Building a Data Object 603
Displaying the Bound Object 604
Updating the Database 606
Change Notification 607
Binding to a Collection of Objects 609
Displaying and Editing Collection Items 610
Inserting and Removing Collection Items 614
Binding to the ADO.NET Objects 615
Binding to a LINQ Expression 616
Improving Performance in Large Lists 619
Virtualization 619
Item Container Recycling 621
Deferred Scrolling 621
Validation 621
Validation in the Data Object 622
Custom Validation Rules 626
Reacting to Validation Errors 628
Getting a List of Errors 629
Showing a Different Error Indicator 630
Validating Multiple Values 633

CONTENTS

xvii
Data Providers 636
The ObjectDataProvider 637
The XmlDataProvider 640
The Last Word 642
■Chapter 20: Formatting Bound Data 643
Data Binding Redux 643


Data Conversion 645
The StringFormat Property 645
Introducing Value Converters 647
Formatting Strings with a Value Converter 648
Creating Objects with a Value Converter 650
Applying Conditional Formatting 653
Evaluating Multiple Properties 654
List Controls 656
List Styles 658
The ItemContainerStyle 659
A ListBox with Check Boxes or Radio Buttons 660
Alternating Item Style 663
Style Selectors 665
Data Templates 668
Separating and Reusing Templates 671
More Advanced Templates 672
Varying Templates 675
Template Selectors 676
Templates and Selection 679
Changing Item Layout 684
The ComboBox 686
The Last Word 689
■Chapter 21: Data Views 691
The View Object 691

Retrieving a View Object 692
Navigating with a View 692

CONTENTS


xviii
Creating a View Declaratively 695
Filtering, Sorting, and Grouping 697
Filtering Collections 697
Filtering the DataTable 701
Sorting 702
Grouping 703
The Last Word 707
■Chapter 22: Lists, Grids, and Trees 709
The ListView 710

Creating Columns with the GridView 711
Creating a Custom View 715
The TreeView 724
A Data-Bound TreeView 724
Binding a DataSet to a TreeView 728
Just-in-Time Node Creation 729
The DataGrid 732
Resizing and Rearranging Columns 734
Defining Columns 735
Formatting and Styling Columns 740
Formatting Rows 742
Row Details 744
Freezing Columns 745
Selection 745
Sorting 746
DataGrid Editing 746
The Last Word 749
■Chapter 23: Windows 751

The Window Class 751

Showing a Window 754
Positioning a Window 755
Saving and Restoring Window Location 756
Window Interaction 758

CONTENTS

xi
x
Window Ownership 760
The Dialog Model 761
Common Dialog Boxes 762
Nonrectangular Windows 763
A Simple Shaped Window 763
A Transparent Window with Shaped Content 766
Moving Shaped Windows 768
Resizing Shaped Windows 769
Putting It All Together: A Custom Control Template for Windows 770
The Aero Glass Effect 774
Programming the Windows 7 Taskbar 779
Using Jump Lists 779
Changing the Taskbar Icon and Preview 784
The Last Word 790
■Chapter 24: Pages and Navigation 791
Understanding Page-Based Navigation 791

Page-Based Interfaces 792
A Simple Page-Based Application with NavigationWindow 793

The Page Class 795
Hyperlinks 796
Hosting Pages in a Frame 799
Hosting Pages in Another Page 800
Hosting Pages in a Web Browser 802
The Page History 803
A Closer Look at URIs in WPF 803
Navigation History 804
Maintaining Custom Properties 805
The Navigation Service 806
Programmatic Navigation 806
Navigation Events 808
Managing the Journal 809
Adding Custom Items to the Journal 811

CONTENTS

x
x
Page Functions 816
XAML Browser Applications 819
XBAP Requirements 819
Creating an XBAP 820
Deploying an XBAP 821
Updating an XBAP 823
XBAP Security 824
Full-Trust XBAPs 826
Combination XBAP/Stand-Alone Applications 826
Coding for Different Security Levels 827
Embedding an XBAP in a Web Page 832

The WebBrowser Control 833
Navigating to a Page 833
Building a DOM Tree 835
Scripting a Web Page with .NET Code 837
The Last Word 840
■Chapter 25: Menus, Toolbars, and Ribbons 841
Menus 841

The Menu Class 841
Menu Items 843
The ContextMenu Class 845
Menu Separators 846
Toolbars and Status Bars 847
The ToolBar 847
The StatusBar 851
Ribbons 852
Adding the Ribbon 853
Styling the Ribbon 854
Commands 855
The Application Menu 856
Tabs, Groups, and Buttons 859
Ribbon Sizing 862

CONTENTS

xxi
The Quick access Toolbar 864
The Last Word 866
■Chapter 26: Sound and Video 865
Playing WAV Audio 865


The SoundPlayer 866
The SoundPlayerAction 867
System Sounds 868
The MediaPlayer 868
The MediaElement 871
Playing Audio Programmatically 871
Handling Errors 872
Playing Audio with Triggers 872
Playing Multiple Sounds 875
Changing Volume, Balance, Speed, and Position 876
Synchronizing an Animation with Audio 878
Playing Video 880
Video Effects 881
Speech 885
Speech Synthesis 885
Speech Recognition 887
The Last Word 889
■Chapter 27: 3-D Drawing 889
3-D Drawing Basics 889

The Viewport 890
3-D Objects 890
The Camera 899
Deeper into 3-D 903
Shading and Normals 905
More Complex Shapes 909
Model3DGroup Collections 910
Materials Revisited 912
Texture Mapping 914


CONTENTS

xxii
Interactivity and Animations 918
Transforms 919
Rotations 920
A Fly Over 921
The Trackball 923
Hit Testing 925
2-D Elements on 3-D Surfaces 929
The Last Word 932
■Chapter 28: Documents 935
Understanding Documents 935

Flow Documents 936
The Flow Elements 937
Formatting Content Elements 939
Constructing a Simple Flow Document 941
Block Elements 942
Inline Elements 949
Interacting with Elements Programmatically 956
Text Justification 959
Read-Only Flow Document Containers 960
Zooming 961
Pages and Columns 962
Loading Documents from a File 965
Printing 966
Editing a Flow Document 967
Loading a File 967

Saving a File 969
Formatting Selected Text 970
Getting Individual Words 973
Fixed Documents 974
Annotations 976
The Annotation Classes 977
Enabling the Annotation Service 977

CONTENTS

xxiii
Creating Annotations 979
Examining Annotations 982
Reacting to Annotation Changes 986
Storing Annotations in a Fixed Document 986
Customizing the Appearance of Sticky Notes 987
The Last Word 988
■Chapter 29: Printing 989
Basic Printing 989

Printing an Element 990
Transforming Printed Output 993
Printing Elements Without Showing Them 995
Printing a Document 996
Manipulating the Pages in a Document Printout 1000
Custom Printing 1002
Printing with the Visual Layer Classes 1002
Custom Printing with Multiple Pages 1006
Print Settings and Management 1012
Maintaining Print Settings 1012

Printing Page Ranges 1012
Managing a Print Queue 1013
Printing Through XPS 1016
Creating an XPS Document for a Print Preview 1017
Writing to an In-Memory XPS Document 1018
Printing Directly to the Printer via XPS 1019
Asynchronous Printing 1019
The Last Word 1020
■Chapter 30: Interacting with Windows Forms 1019
Assessing Interoperability 1019

Missing Features in WPF 1020
Mixing Windows and Forms 1022
Adding Forms to a WPF Application 1022
Adding WPF Windows to a Windows Forms Application 1023

CONTENTS

xxi
v

Showing Modal Windows and Forms 1023
Showing Modeless Windows and Forms 1024
Visual Styles for Windows Forms Controls 1024
Windows Forms Classes That Don’t Need Interoperability 1025
Creating Windows with Mixed Content 1029
WPF and Windows Forms “Airspace” 1030
Hosting Windows Forms Controls in WPF 1031
WPF and Windows Forms User Controls 1034
Hosting WPF Controls in Windows Forms 1035

Access Keys, Mnemonics, and Focus 1037
Property Mapping 1039
The Last Word 1041
■Chapter 31: Multithreading 1041
Multithreading 1041

The Dispatcher 1042
The DispatcherObject 1042
The BackgroundWorker 1045
The Last Word 1054
■Chapter 32: The Add-in Model 1055
Choosing Between MAF and MEF 1055

The Add-in Pipeline 1056
How the Pipeline Works 1057
The Add-in Folder Structure 1059
Preparing a Solution That Uses the Add-in Model 1060
An Application That Uses Add-Ins 1063
The Contract 1063
The Add-in View 1064
The Add-In 1064
The Add-in Adapter 1065
The Host View 1066
The Host Adapter 1067
The Host 1067

×