pro wpf in c# 2010: windows presentation foundation … · contents abouttheauthor xxvi...

23
ProWPFinC# 2010: Windows Presentation Foundation in .NET 4 Matthew MacDonald Apress*

Upload: dangxuyen

Post on 26-Sep-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

ProWPFinC# 2010:Windows Presentation Foundation in

.NET 4

Matthew MacDonald

Apress*

Contents

About the Author xxvi

About the Technical Reviewer xxvil

Acknowledgments xxviii

Introduction xxix

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

iv

CONTENTS

The Variants of XAML 25

XAML Compilation 26

XAML Basics 27

XAML Namespaces 28

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

IChapter 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

v

Si CONTENTS

Layout Properties b'

Alignment 68

Margin 69

Minimum, Maximum, and Explicit Sizes 71

The Border 74

The WrapPanel and DockPanel 75

TheWrapPanel 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

vi

CONTENTS

Property Validation 114

The Validation Callback 114

The Coercion Callback 115

The Last Word 118

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

vii

CONTENTS

The Last Word 157

Chapter 6: Controls 159

The Control Class 160

Background and Foreground Brushes 160

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

TheGroupBox 192

TheTabltem 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

viii

CONTENTS

Chapter 7: The Application 215

The Application Life Cycle 215

Creating an Application Object 216

Deriving a Custom Application Class 217

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 284

Retrieving Resources 236

Pack URIs 237

Content Files 239

Localization 239

Building Localizabie 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

ix

CONTENTS

RelativeSource

DataContext 263

The Last Word 264

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

x

CONTENTS

System Resources 301

Resource Dictionaries 302

Creating a Resource Dictionary 302

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

xi

a CONTENTS

Line Caps and Line Joins J4°

Dashes 349

Pixel Snapping 351

Brushes 352

The SolidColorBrush 353

The LinearGradientBrush 354

The RadialGradientBrush 356

The ImageBrush 358

A Tiled ImageBrush 360

The VisualBmsh 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

xii

CONTENTS

Drawing Visuals ^00

Wrapping Visuals in an Element 402

Hit Testing 405

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

xiii

CONTENTS

Easing In and Easing Out 4DJ

Easing Function Classes 45^

Creating a Custom Easing Function 458

Animation Performance 4^0

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

xiv

CONTENTS

Template Bindings 515

Triggers That Change Properties 517

Triggers That Use Animation 520

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

IChapter 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

xv

CONTENTS

Using the FlipPanel jau

Using a Different Control Template 581

Custom Panels 582

The Two-Step Layout Process 583

The Canvas Clone 586

A Better Wrapping Panel 587

Custom-Drawn Elements 590

The OnRenderO 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 UNQ Expression 616

Improving Performance in Large Lists 619

Visualization 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

xvi

CONTENTS

Getting a List of Errors 629

Showing a Different Error Indicator 630

Validating Multiple Values 633

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

xvii

Si CONTENTS

The View Object 091

Retrieving a View Object 692

Navigating with a View ^92

Creating a View Declaratively 695

Filtering, Sorting, and Grouping 697

Filtering Collections 697

Filtering the DataTable 701

Sorting 702

Grouping 703

The Last Word 7

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

xviii

CONTENTS

Positioning a Window 75^

Saving and Restoring Window Location 756

Window Interaction 758

Window Ownership 760

The Dialog Model 761

Common Dialog Boxes ?62

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 7

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 LookatURIs in WPF 803

Navigation History 804

Maintaining Custom Properties 805

The Navigation Service 806

Programmatic Navigation 806

xix

CONTENTS

Navigation Events ouo

Managing the Journal 809

Adding Custom Items to the Journal 811

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

XX

CONTENTS

The Application Menu 856

Tabs, Groups, and Buttons 859

Ribbon Sizing 862

The Quick access Toolbar 864

The Last Word 866

Chapter 26: Sound and Video 365

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

xxi

CONTENTS

Model3DGroup Collections JIU

Materials Revisited 912

Texture Mapping 914

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 Prog rammatically 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

xxii

CONTENTS

Annotations 976

The Annotation Classes 977

Enabling the Annotation Service 977

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

xxiii

« CONTENTS

Mixing Windows and Forms IU<^

Adding Forms to a WPF Application 1022

Adding WPF Windows to a Windows Forms Application 1023

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 1°29

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-lns 1063

The Contract 1063

The Add-in View 1064

The Add-In 1064

The Add-in Adapter 1065

xxiv

CONTENTS

The Host View "1066

The Host Adapter 1067

The Host 1067

Adding More Add-lns 1070

Interacting with the Host 1071

Visual Add-lns 1076

The Last Word 1079

Chapter 33: ClickOnce Deployment 1079

Understanding Application Deployment 1080

The ClickOnce Installation Model 1081

ClickOnce Limitations 1082

A Simple ClickOnce Publication 1083

Setting the Publisher and Production 1083

Starting the Publish Wizard 1085

The Deployed File Structure 1091

Installing a ClickOnce Application 1092

Updating a ClickOnce Application 1093

Additional ClickOnce Options 1094

Publish Version 1094

Updates 1095

File Associations 1096

Publish Options 1098

The Last Word 1099

XXV