ffirs.indd ii
3/28/11 1:11:06 PM
BEGINNING WINDOWS® PHONE 7 APPLICATION DEVELOPMENT INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii CHAPTER 1
Introducing Windows Phone 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
CHAPTER 2
Jaw-Dropping Apps with the Help of Silverlight . . . . . . . . . . . . . . . . . . . 23
CHAPTER 3
Spice Up Your App with Shapes, Colors, Brushes, and Transforms . . . 65
CHAPTER 4
Advanced User Interface Techniques: Styles, Templates, and the Visual State Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
CHAPTER 5
Isolated Storage, Page Navigation, and the Application Life Cycle . . .147
CHAPTER 6
Interacting with the Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
CHAPTER 7
Launchers, Choosers, and Advanced User Input. . . . . . . . . . . . . . . . . . 225
CHAPTER 8
Windows Phone 7 Services and Cloud Services . . . . . . . . . . . . . . . . . . 277
CHAPTER 9
Creating and Consuming Web Services . . . . . . . . . . . . . . . . . . . . . . . . . 305
CHAPTER 10
Web Services Push Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
CHAPTER 11
XNA for Windows Phone 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
CHAPTER 12
Microsoft Expression Blend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
CHAPTER 13
Using the Silverlight for Windows Phone Toolkit and Creating Panoramic User Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
CHAPTER 14
Patterns, Frameworks, and Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
CHAPTER 15
Publishing Your Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
APPENDIX
Solutions to Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
ffirs.indd i
3/28/11 1:11:03 PM
ffirs.indd ii
3/28/11 1:11:06 PM
BEGINNING
Windows® Phone 7 Application Development BUILDING WINDOWS® PHONE APPLICATIONS USING SILVERLIGHT® AND XNA®
Nick Lecrenski Karli Watson Robert Fonseca-Ensor
ffirs.indd iii
3/28/11 1:11:06 PM
Beginning Windows® Phone 7 Application Development: Building Windows® Phone Applications Using Silverlight® and XNA® Published by Wiley Publishing, Inc. 10475 Crosspoint Boulevard Indianapolis, IN 46256 www.wiley.com Copyright © 2011 Wiley Publishing, Inc., Indianapolis, Indiana Published simultaneously in Canada ISBN: 978-0-470-91233-1 ISBN: 978-1-118-09628-4 (ebk) ISBN: 978-1-118-09629-1 (ebk) ISBN: 978-1-118-09630-7 (ebk) Manufactured in the United States of America 10 9 8 7 6 5 4 3 2 1 No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or online at http://www.wiley.com/go/permissions. Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional services. If professional assistance is required, the services of a competent professional person should be sought. Neither the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or website may provide or recommendations it may make. Further, readers should be aware that Internet websites listed in this work may have changed or disappeared between when this work was written and when it is read. For general information on our other products and services please contact our Customer Care Department within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002. Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available in electronic books. Library of Congress Control Number: 2011920899 Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, and Wrox Programmer to Programmer are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affi liates, in the United States and other countries, and may not be used without written permission. Windows, Silverlight, and XNA are registered trademarks of Microsoft Corporation. All other trademarks are the property of their respective owners. Wiley Publishing, Inc. is not associated with any product or vendor mentioned in this book.
ffirs.indd iv
3/28/11 1:11:08 PM
This book is dedicated to my beautiful wife, Kristie, and my daughters, Tabetha and Cheyenne. —Nick Lecrenski
For donna. —Karli Watson
For the love of my life, Cara. —Robert Fonseca-Ensor
ffirs.indd v
3/28/11 1:11:09 PM
CREDITS
ffirs.indd vi
ACQUISITIONS EDITOR
PRODUCTION MANAGER
Paul Reese
Tim Tate
PROJECT EDITOR
VICE PRESIDENT AND EXECUTIVE GROUP PUBLISHER
Ginny Bess Munroe
Richard Swadley
TECHNICAL EDITOR
VICE PRESIDENT AND EXECUTIVE PUBLISHER
Jonathan Marbutt
Barry Pruett
PRODUCTION EDITOR
ASSOCIATE PUBLISHER
Kathleen Wisor
Jim Minatel
COPY EDITOR
PROJECT COORDINATOR, COVER
Kitty Wilson
Katie Crocker
EDITORIAL DIRECTOR
PROOFREADER
Robyn B. Siesky
Nancy Carrasco
EDITORIAL MANAGER
INDEXER
Mary Beth Wakefield
Robert Swanson
FREELANCER EDITORIAL MANAGER
COVER DESIGNER
Rosemarie Graham
Michael Trent
ASSOCIATE DIRECTOR OF MARKETING
COVER IMAGE
David Mayhew
© iStock/Oleksiy Mark
3/28/11 1:11:10 PM
ABOUT THE AUTHORS
NICK LECRENSKI is a developer with 10 years of experience in a wide range of Microsoft
technologies including Visual C++, C#, VB, VB.NET, SQL Server, .NET Framework, ASP.NET, AJAX, Silverlight, and more. He has a BS in Computer Science and has worked in various fields from biometrics to financial services. He is also the founder and lead developer of MyFitnessJournal.com, a fitness training website that currently utilizes Silverlight technology. He is also the author of Silverlight 4: Problem - Design - Solution, available from www.wrox.com. KARLI WATSON is an IT contractor and author currently working in London in the fi nancial sector.
For the most part, he immerses himself in .NET (in particular, C#) and has written numerous books in the field for several publishers. He specializes in communicating complex ideas in a way that is accessible to anyone with a passion to learn, and he spends much of his time playing with technology to fi nd new things to teach people. During those (seemingly few) times where he isn’t doing the previous, Karli is probably wishing he was hurtling down a mountain on a snowboard or possibly trying to get his novel published. Either way, you’ll know him by his brightly colored clothes. ROBERT FONSECA-ENSOR is a software engineer consulting with Infusion (www.infusion.com). From New Zealand, he currently lives in London. He specializes in user interface development and has been working with Microsoft Surface, Silverlight, and WPF for the past four years. Rob has a strong passion for learning new things and then teaching them to others. He enjoys attending and presenting at .NET user groups so much that he started the Canary Wharf .NET User Group. He plans to become a university professor “as soon as he gets sick of coding in the real world,” which isn’t going to happen soon. Rob’s wife is an IOS developer, and together they have built and released a couple of successful iPhone games. Now that his weekends are writing-free, he plans to churn out some awesome WP7 games, so watch your back. Rob keeps a blog at www.robfe.com , and has a twitter account at www.twitter.com/robfe.
ffirs.indd vii
3/28/11 1:11:10 PM
ACKNOWLEDGMENTS
I WOULD LIKE TO THANK EVERYONE at Wrox who had a part in helping to get this book to print.
First, I would like to thank my family for supporting me on another book writing endeavor. I would also like to take the time to thank Paul Reese for giving me the opportunity to work on another book project and Ginny Munroe, our primary editor, who fought to keep us all on track and on time, which was no easy task. I would also like to thank Jonathan Marbutt, our technical editor, for checking all of our code and offering valuable input during the writing process. Finally, I would also like to thank my co-authors, Karli and Robert, for their great work on this project and ensuring that all of the material will help our readers realize the goal of developing mobile applications on the new Windows Phone 7 platform.
—Nick
THANKS TO ALL AT WROX for their hard work in making my writing as good as it can be. In no particular order, thanks especially to Paul Reese for getting things off the ground, Ginny for infi nite patience and good humour, and Kitty for her wordsmithing. Also, thanks to my fellow authors, including many congratulations to Rob for getting through that “difficult fi rst book!”
—Karli
I COULD NEVER HAVE GOTTEN this far if not for my darling wife, Cara. You’re inspirational, patient,
and wonderful. Thank you for all the support you give me. Thanks to the staff at Wrox for all their support and patience, especially Ginny and Paul. To all my mentors: Karli, Ben Gracewood, Dr. Rick Mugridge, Dr. Ewan Tempero, David Okey, Alan Goodison, and especially my parents — thank you for believing in me.
—Robert
ffirs.indd viii
3/28/11 1:11:11 PM
CONTENTS
INTRODUCTION CHAPTER 1: INTRODUCING WINDOWS PHONE 7
The Windows Mobile Platform Here Comes the iPhone Android Arrives A Microsoft Reboot
The Windows Phone 7 Platform Windows Phone 7 Hardware Specifications Windows Phone 7 Architecture
Getting Started with Windows Phone 7 Development Navigating through Visual Studio 2010 Express Edition
Summary CHAPTER 2: JAW-DROPPING APPS WITH THE HELP OF SILVERLIGHT
Requirements for Windows Phone 7 Development What Is Silverlight? What Is XAML? The Anatomy of a Windows Phone Application Developing with Silverlight Controls Common Control Properties Layout Controls Programming with Silverlight Interactive Controls
Summary CHAPTER 3: SPICE UP YOUR APP WITH SHAPES, COLORS, BRUSHES, AND TRANSFORMS
Working with Shapes The Ellipse Control The Rectangle Control The Line Control The Polygon Control The Polyline Control
Working with Colors
ftoc.indd ix
xvii 1
2 2 3 4
5 5 6
11 11
18 23
24 24 26 26 34 35 37 44 47
62 65
65 66 67 69 73 74
75
3/28/11 6:48:43 PM
CONTENTS
Using Brushes The SolidColorBrush Object The LinearGradientBrush Object The RadialGradientBrush Object The ImageBrush Object
Applying Transforms The RotateTransform Object The ScaleTransform Object The SkewTransform Control The TranslateTransform Object The TransformGroup Object
Summary CHAPTER 4: ADVANCED USER INTERFACE TECHNIQUES: STYLES, TEMPLATES, AND THE VISUAL STATE MANAGER
Understanding Control Styles Application Styles BasedOn Styles Control Templates The Visual State Manager Expression Blend User Controls Custom Controls
Summary CHAPTER 5: ISOLATED STORAGE, PAGE NAVIGATION, AND THE APPLICATION LIFE CYCLE
Isolated Storage How Windows Phone 7 Data Storage Works Getting Started Using Isolated Storage The IsolatedStorageSettings Object The IsolatedStorageFile Object
Using the Navigation Framework Getting to Know the Navigation Framework The NavigationService Class Query Strings Navigation Events Page State
The Application Life Cycle The Launching State
78 78 78 80 81
82 82 85 86 87 90
97 99
100 102 107 109 117 127 127 131
143 147
148 148 148 149 150
155 156 156 157 157 158
167 167
x
ftoc.indd x
3/28/11 6:48:45 PM
CONTENTS
The Running State The Closing State The Deactivating State The Activating State
Summary CHAPTER 6: INTERACTING WITH THE HARDWARE
What’s Different about Mobile Device Application Development? The Windows Phone 7 Hardware Specification Altering Device Orientation Configuring Supported Orientations Responding to Orientation Changes Device Orientation Best Practices
Understanding the Back Button Taking Advantage of the Back Button’s Functionality Responding to the Back Button
168 168 168 169
180 183
184 185 186 187 187 193
194 194 194
Vibration Tuning In to the FM Radio Accelerating with the Accelerometer
199 200 201
The AccelerometerSensor Sensor Simulating Accelerometer Data
201 212
Summary CHAPTER 7: LAUNCHERS, CHOOSERS, AND ADVANCED USER INPUT
Using the Application Bar
221 225
226
Adding an Application Bar Application Bar Best Practices
227 241
Using Launchers and Choosers
242
An Overview of Launchers An Overview of Choosers Tombstoning Working with Contacts Making Voice Calls Using Email and SMS Messaging Interacting with the Camera Using Other Launchers
The Software Input Panel (SIP) Controlling the SIP
Using Multitouch
242 243 244 244 251 252 252 254
259 260
262
xi
ftoc.indd xi
3/28/11 6:48:45 PM
CONTENTS
Simulating Multitouch Manipulation Events Using Gestures
Summary CHAPTER 8: WINDOWS PHONE 7 SERVICES AND CLOUD SERVICES
What Are Services? Finding Yourself with Location Services Location Data Sources Overview and Comparison Obtaining Location Information Location Service Best Practices
Using Cloud Services Using Microsoft Cloud Data Using Bing Maps in a WP7 Application
Summary CHAPTER 9: CREATING AND CONSUMING WEB SERVICES
Service Architecture Primer HTTP REST WCF
Web Requests and Responses Using WebClient Using WebRequest and WebResponse Cached Responses
REST-Based Services Consuming a RESTful Service Creating RESTful Services
WCF Services Tools for Creating WCF Services Hosting WCF Services Creating WCF Services WCF Services Example Application WCF REST Services
Summary CHAPTER 10: WEB SERVICES PUSH NOTIFICATIONS
262 263 272
273 277
278 278 279 281 293
294 294 296
301 305
306 306 307 307
308 308 309 315
315 316 325
325 326 326 326 327 340
343 347
Push Notification Architecture
348
Push Notification Components
348
xii
ftoc.indd xii
3/28/11 6:48:45 PM
CONTENTS
Registering a Push Notification Service Creating and Opening Notification Channels Types of Push Notifications
Sending and Responding to Push Notifications Creating and Configuring a Notification Channel Sending Push Notification Service Messages Creating a Push Notification Service
Summary CHAPTER 11: XNA FOR WINDOWS PHONE 7
What Is XNA? An XNA Game: Tank What’s in My Solution? The Game Class Running the Tank Game
Drawing 2-D Graphics The SpriteBatch Class The ContentManager Class How to Draw Images How to Draw Text
Updating Game State The Versatility of Vectors Keeping in Time The TouchPanel Class Driving the Tank
Simplifying Your Code with Game Components The GameComponent and DrawableGameComponent Classes GameComponent Life Cycles
More XNA Tips and Tricks Handling Many Objects Efficiently Playing Sounds Advanced Geometry: Homing Missiles Nonvisual Components Detecting Collisions Rendering Smooth Text with a Drop Shadow
Summary CHAPTER 12: MICROSOFT EXPRESSION BLEND
The Blend Interface Using Blend’s Tools and Panels
348 349 350
351 351 358 362
371 375
375 377 378 379 383
383 384 385 385 389
393 393 397 397 398
403 403 416
416 416 423 423 426 428 429
432 435
436 437
xiii
ftoc.indd xiii
3/28/11 6:48:46 PM