SlideShare a Scribd company logo
October 1st 2012




Cross Development
Windows 8 and
Windows Phone 8

Dave Bost
Technical Evangelist, Windows Phone
http://davebost.com
@davebost
30 Days to Launch



           Launch your App or Game in 30 days
           Generation App
                 Online training and tips from insiders
                 App and Game dev content
                 Tele-support with a Windows 8 architect
                 Exclusive one-on-one WinRT and Windows UX design
                  consultation


                 http://aka.ms/FreeBeer
Best Practices for Windows 8 / Windows Phone 8

•     Linked files
•     #if conditionals
•     Using Extension methods to bridge implementation differences
•     MVVM
•     Portable Class Libraries
•     A common user experience bringing high-quality experiences to the user.




3   Microsoft confidential   12/6/2012
Common Structure

                             Windows 8   Windows Phone 8




4   Microsoft confidential   12/6/2012
Common APIs in
Windows 8 and
Windows Phone 8
Windows Phone 8 Developer Platform
                            XAML Apps                               Direct3D Apps
                                                                       In-App
               XAML         Maps        Geolocation     Sensors                     Direct3D
                                                                      Purchase

               HTML          XML         Threading       Touch         Speech       XAudio2

Your apps     Phone
             Features
                             Push         Camera         Video        Proximity
                                                                                     Media
                                                                                   Foundation

Your way     Calendar       Wallet       Contacts      Core Types       VoIP          STL

            Multitasking   Live Tiles    Memory          Async        Enterprise      CRT

                   C# and VB                        C#, VB, and C++                  C++
                             File system, Networking, Graphics, Media
                                        Core Operating System
“Add as Link”




7   Microsoft confidential   12/6/2012
“Add as Link”

Windows 8                                Windows Phone 8




8   Microsoft confidential   12/6/2012
Common APIs

Common                                   Different
Base Class Library                       Launchers and Choosers
Hardware                                 Sharing APIs
Storage (Files and Folders)




9   Microsoft confidential   12/6/2012
#if Conditional Blocks

Windows 8
 #if NETFX_CORE
 Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
 #endif


Windows Phone 8
 #if WINDOWS_PHONE
 Deployment.Current.Dispatcher.BeginInvoke(() => {
 #endif



10   Microsoft confidential   12/6/2012
Threading

Windows 8 AND Windows Phone 8
 #if NETFX_CORE
 Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
 #else
 Deployment.Current.Dispatcher.BeginInvoke(() => {
 #endif
     double _accelX = args.Reading.AccelerationX;
     double _accelY = args.Reading.AccelerationY;




11   Microsoft confidential   12/6/2012
Web Service




12   Microsoft confidential   12/6/2012
HttpWebResponse and HttpWebRequest

Windows 8
 var request = (HttpWebRequest)WebRequest.Create(autoCompleteUri);

 HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

 // retrieve data using StreamReader




13   Microsoft confidential   12/6/2012
HttpWebResponse and HttpWebRequest

Windows Phone 8
 var request = (HttpWebRequest)WebRequest.Create(autoCompleteUri);
 request.BeginGetResponse(new AsyncCallback(AutoCompleteCallback), request);
 }

 private void AutoCompleteCallback(IAsyncResult callback)
 {
     HttpWebRequest request = (HttpWebRequest)callback.AsyncState;
         HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callback);
         // retrieve data using StreamReader
 }




14   Microsoft confidential   12/6/2012
Convergence through
Extension
Extension Methods

Windows Phone 8 HttpWebRequest Extension
public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request)
{
    var taskComplete = new TaskCompletionSource<HttpWebResponse>();
    request.BeginGetResponse(asyncResponse =>
    {
        HttpWebRequest responseRequest =
            (HttpWebRequest)asyncResponse.AsyncState;
        HttpWebResponse someResponse =
            (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
        taskComplete.TrySetResult(someResponse);
    }, request);

         return taskComplete.Task;
}
16   Microsoft confidential   12/6/2012
HttpWebResponse and HttpWebRequest

Windows 8 AND Windows Phone 8
 var request = (HttpWebRequest)WebRequest.Create(autoCompleteUri);

 HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

 // retrieve data using StreamReader




17   Microsoft confidential   12/6/2012
Convergence through
Architecture
Model-View-ViewModel (MVVM)
Portable Class Libraries
Developing for Windows Phone 8 and Windows 8
Cross-platform app architecture
Developing for Windows Phone 8 and Windows 8
UI Differences and XAML




24   Microsoft confidential   12/6/2012
Different Form Factors Require Different UX

Windows Phone 8                               Windows 8
Screen Size                                   Screen Size
800x480                                       1024x768

1280x720                                      2,560x1,440

1280x768                                      everything
                                              in between



25   Microsoft confidential   12/6/2012
Different Form Factors Require Different UX

Windows Phone 8                               Windows 8
Orientation                                   Orientation
Portrait                                      Portrait

Landscape                                     Landscape

                                              Snapped




26   Microsoft confidential   12/6/2012
Different Controls


 GridView
 Group-able

 Array of Tiles

 Dynamic item size




27   Microsoft confidential
Different Controls


 FlipView
 Browsing View

 Touch-optimized for
 left-right navigation




28   Microsoft confidential
Developing for Windows Phone 8 and Windows 8
Different Form Factors Require Different UX


 Panorama
 Introduction and
 exploratory content




30   Microsoft confidential
Different Form Factors Require Different UX


 Pivot
 Scanning views

 Grouped information




31   Microsoft confidential
Different Form Factors Require Different UX


 LongListSelector
 Headers and Footers

 Group header
 navigation




32   Microsoft confidential
Developing for Windows Phone 8 and Windows 8
Developing for Windows Phone 8 and Windows 8
Different Form Factors Require Different UX
GridView  LongListSelector




35   Microsoft confidential
Summary
Windows 8 / Windows Phone 8 Apps Are a Perfect Match

•      Abstracting Models, ViewModels
         •      Binding data to the View
         •      Linked files
         •      Models, Services could be encapsulated in Portable Class Libraries
•      Shared APIs (hardware, storage, base class libraries)
•      Using #if conditionals for small code differences
•      Using Extension methods to bridge implementation differences
         •      Async-await model for HttpWebResponse/Request
•      Focus on the user experience that works for the form factor


37   Microsoft confidential   12/6/2012
The information herein is for informational                        interpreted to be a commitment on the part of
purposes only an represents the current view of                    Microsoft, and Microsoft cannot guarantee the
Microsoft Corporation as of the date of this                       accuracy of any information provided after the
presentation. Because Microsoft must respond                       date of this presentation.
to changing market conditions, it should not be

MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION
IN THIS PRESENTATION.




© 2012 Microsoft Corporation.
All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

More Related Content

PPT
WPF Applications, It's all about XAML these days
PPTX
Windows Phone Application Platform
PPTX
Introducing Windows Phone 8 Development
PPTX
Monetizing Your Windows Phone App
PPTX
01 introducing the windows phone 8.1
PPT
Windows mobile
PPTX
Sharing code win8 wp8
PDF
Porting iPhone Apps to Windows Phone 7
WPF Applications, It's all about XAML these days
Windows Phone Application Platform
Introducing Windows Phone 8 Development
Monetizing Your Windows Phone App
01 introducing the windows phone 8.1
Windows mobile
Sharing code win8 wp8
Porting iPhone Apps to Windows Phone 7

What's hot (19)

PPTX
Windows phone7 subodh
PPT
Windows Phone
PPTX
Windows Phone 7 Architecture Overview
DOCX
Automatic answer checker
PPT
Windows Mobile
PPTX
Sinergija 12 WP8 is around the corner
PPTX
Windows 8 & Phone 8 - an Architectural Battle Plan
DOCX
Vb.net class notes
PPT
Windows Phone 7 v.s iOS Development
PPTX
PDF
Windows Phone
PPTX
Iasi 15 noiembrie 2009 Introduction to Windows Mobile programming
PPTX
Windows Phone 7: Silverlight
PPTX
Microsoft.net architecturte
DOCX
Online advertising management system
DOCX
Online lg prodect
PDF
Mobile Developers Guide To The Galaxy Vol.6
PPTX
Windows 7 For Developers
Windows phone7 subodh
Windows Phone
Windows Phone 7 Architecture Overview
Automatic answer checker
Windows Mobile
Sinergija 12 WP8 is around the corner
Windows 8 & Phone 8 - an Architectural Battle Plan
Vb.net class notes
Windows Phone 7 v.s iOS Development
Windows Phone
Iasi 15 noiembrie 2009 Introduction to Windows Mobile programming
Windows Phone 7: Silverlight
Microsoft.net architecturte
Online advertising management system
Online lg prodect
Mobile Developers Guide To The Galaxy Vol.6
Windows 7 For Developers
Ad

Viewers also liked (13)

PPTX
B Ramalinga Raju
PDF
Project Resource Management 3 Jon Lewis
PPTX
Mukesh Ambani vs. Anil Ambani
PPT
Prince2 2005 Vs Prince2 2009
PPSX
NEETY EURO ASIA SOLAR ENERGY
PDF
Crisc prep-guide
PPSX
State Bank Of India
PDF
CRISC Exam Questions
PPT
Measuring market demand
B Ramalinga Raju
Project Resource Management 3 Jon Lewis
Mukesh Ambani vs. Anil Ambani
Prince2 2005 Vs Prince2 2009
NEETY EURO ASIA SOLAR ENERGY
Crisc prep-guide
State Bank Of India
CRISC Exam Questions
Measuring market demand
Ad

Similar to Developing for Windows Phone 8 and Windows 8 (20)

PPTX
Windows Phone 8 App Development
PPTX
Windows Phone 8 Advanced Developers Conference
PPTX
Adc2012 windows phone 8
PPTX
Windows 8 mobile app development
PPTX
Shape 2013 developing multi targeting windows store and windows phone apps
PPTX
Runtime 8 and Windows Phone 8
PDF
S#01 김영욱
PPTX
Windows phone 8 overview
PPTX
Developing Apps for Windows Phone 8
PDF
Windows phone 8 session 2
PPTX
Wired2Win Webinar: Windows8 Mobile App Development
PDF
A Complete guide of Windows 8 with its application
PPTX
Windows 8 DevUnleashed - Session 1
PPTX
Iasi code camp 12 october 2013 adrian marinica - windows 8 and windows phon...
PPTX
microsoft windows phone for government and citizens
PPTX
Windows phone 8 apps
PPTX
A Lap Around Windows Phone 8.1
PDF
QBS Visual Studio 2012 and modern windows apps
PPTX
Become a Windows 8 and Windows Phone App Developer at TechDays
PDF
Windows 8 product guide developer english
Windows Phone 8 App Development
Windows Phone 8 Advanced Developers Conference
Adc2012 windows phone 8
Windows 8 mobile app development
Shape 2013 developing multi targeting windows store and windows phone apps
Runtime 8 and Windows Phone 8
S#01 김영욱
Windows phone 8 overview
Developing Apps for Windows Phone 8
Windows phone 8 session 2
Wired2Win Webinar: Windows8 Mobile App Development
A Complete guide of Windows 8 with its application
Windows 8 DevUnleashed - Session 1
Iasi code camp 12 october 2013 adrian marinica - windows 8 and windows phon...
microsoft windows phone for government and citizens
Windows phone 8 apps
A Lap Around Windows Phone 8.1
QBS Visual Studio 2012 and modern windows apps
Become a Windows 8 and Windows Phone App Developer at TechDays
Windows 8 product guide developer english

More from Dave Bost (16)

PPTX
Live Tiles and Notifications in Windows Phone
PPTX
Introduction to Silverlight for Windows Phone
PPTX
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
PPTX
Microsoft+PHP: Make Web Not War
PPTX
The Windows Azure Platform (MSDN Events Series)
PPTX
Azure - The Next Frontier
PPTX
Internet Explorer 8 Developer Overview
PPTX
Windows 7 Developer Overview
PPT
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
PPT
ASP.NET 3.5 SP1 (VSLive San Francisco 2009)
PPT
Silverlight 2
PPT
Building Applications for SQL Server 2008
PPT
A Lap Around Windows Azure
PPT
WPF Unleashed: Building Application with Visual Studio 2008 SP1
PPT
MSDN Unleashed: WPF Demystified
PPT
A Tour of CodePlex
Live Tiles and Notifications in Windows Phone
Introduction to Silverlight for Windows Phone
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
Microsoft+PHP: Make Web Not War
The Windows Azure Platform (MSDN Events Series)
Azure - The Next Frontier
Internet Explorer 8 Developer Overview
Windows 7 Developer Overview
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
ASP.NET 3.5 SP1 (VSLive San Francisco 2009)
Silverlight 2
Building Applications for SQL Server 2008
A Lap Around Windows Azure
WPF Unleashed: Building Application with Visual Studio 2008 SP1
MSDN Unleashed: WPF Demystified
A Tour of CodePlex

Recently uploaded (20)

PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Electronic commerce courselecture one. Pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PPT
Teaching material agriculture food technology
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Cloud computing and distributed systems.
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Advanced IT Governance
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Per capita expenditure prediction using model stacking based on satellite ima...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Electronic commerce courselecture one. Pdf
Understanding_Digital_Forensics_Presentation.pptx
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Teaching material agriculture food technology
Advanced Soft Computing BINUS July 2025.pdf
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Advanced methodologies resolving dimensionality complications for autism neur...
Cloud computing and distributed systems.
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
The AUB Centre for AI in Media Proposal.docx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Review of recent advances in non-invasive hemoglobin estimation
Advanced IT Governance

Developing for Windows Phone 8 and Windows 8

  • 1. October 1st 2012 Cross Development Windows 8 and Windows Phone 8 Dave Bost Technical Evangelist, Windows Phone http://davebost.com @davebost
  • 2. 30 Days to Launch Launch your App or Game in 30 days Generation App  Online training and tips from insiders  App and Game dev content  Tele-support with a Windows 8 architect  Exclusive one-on-one WinRT and Windows UX design consultation http://aka.ms/FreeBeer
  • 3. Best Practices for Windows 8 / Windows Phone 8 • Linked files • #if conditionals • Using Extension methods to bridge implementation differences • MVVM • Portable Class Libraries • A common user experience bringing high-quality experiences to the user. 3 Microsoft confidential 12/6/2012
  • 4. Common Structure Windows 8 Windows Phone 8 4 Microsoft confidential 12/6/2012
  • 5. Common APIs in Windows 8 and Windows Phone 8
  • 6. Windows Phone 8 Developer Platform XAML Apps Direct3D Apps In-App XAML Maps Geolocation Sensors Direct3D Purchase HTML XML Threading Touch Speech XAudio2 Your apps Phone Features Push Camera Video Proximity Media Foundation Your way Calendar Wallet Contacts Core Types VoIP STL Multitasking Live Tiles Memory Async Enterprise CRT C# and VB C#, VB, and C++ C++ File system, Networking, Graphics, Media Core Operating System
  • 7. “Add as Link” 7 Microsoft confidential 12/6/2012
  • 8. “Add as Link” Windows 8 Windows Phone 8 8 Microsoft confidential 12/6/2012
  • 9. Common APIs Common Different Base Class Library Launchers and Choosers Hardware Sharing APIs Storage (Files and Folders) 9 Microsoft confidential 12/6/2012
  • 10. #if Conditional Blocks Windows 8 #if NETFX_CORE Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { #endif Windows Phone 8 #if WINDOWS_PHONE Deployment.Current.Dispatcher.BeginInvoke(() => { #endif 10 Microsoft confidential 12/6/2012
  • 11. Threading Windows 8 AND Windows Phone 8 #if NETFX_CORE Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { #else Deployment.Current.Dispatcher.BeginInvoke(() => { #endif double _accelX = args.Reading.AccelerationX; double _accelY = args.Reading.AccelerationY; 11 Microsoft confidential 12/6/2012
  • 12. Web Service 12 Microsoft confidential 12/6/2012
  • 13. HttpWebResponse and HttpWebRequest Windows 8 var request = (HttpWebRequest)WebRequest.Create(autoCompleteUri); HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); // retrieve data using StreamReader 13 Microsoft confidential 12/6/2012
  • 14. HttpWebResponse and HttpWebRequest Windows Phone 8 var request = (HttpWebRequest)WebRequest.Create(autoCompleteUri); request.BeginGetResponse(new AsyncCallback(AutoCompleteCallback), request); } private void AutoCompleteCallback(IAsyncResult callback) { HttpWebRequest request = (HttpWebRequest)callback.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callback); // retrieve data using StreamReader } 14 Microsoft confidential 12/6/2012
  • 16. Extension Methods Windows Phone 8 HttpWebRequest Extension public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request) { var taskComplete = new TaskCompletionSource<HttpWebResponse>(); request.BeginGetResponse(asyncResponse => { HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState; HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse); taskComplete.TrySetResult(someResponse); }, request); return taskComplete.Task; } 16 Microsoft confidential 12/6/2012
  • 17. HttpWebResponse and HttpWebRequest Windows 8 AND Windows Phone 8 var request = (HttpWebRequest)WebRequest.Create(autoCompleteUri); HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); // retrieve data using StreamReader 17 Microsoft confidential 12/6/2012
  • 24. UI Differences and XAML 24 Microsoft confidential 12/6/2012
  • 25. Different Form Factors Require Different UX Windows Phone 8 Windows 8 Screen Size Screen Size 800x480 1024x768 1280x720 2,560x1,440 1280x768 everything in between 25 Microsoft confidential 12/6/2012
  • 26. Different Form Factors Require Different UX Windows Phone 8 Windows 8 Orientation Orientation Portrait Portrait Landscape Landscape Snapped 26 Microsoft confidential 12/6/2012
  • 27. Different Controls GridView Group-able Array of Tiles Dynamic item size 27 Microsoft confidential
  • 28. Different Controls FlipView Browsing View Touch-optimized for left-right navigation 28 Microsoft confidential
  • 30. Different Form Factors Require Different UX Panorama Introduction and exploratory content 30 Microsoft confidential
  • 31. Different Form Factors Require Different UX Pivot Scanning views Grouped information 31 Microsoft confidential
  • 32. Different Form Factors Require Different UX LongListSelector Headers and Footers Group header navigation 32 Microsoft confidential
  • 35. Different Form Factors Require Different UX GridView  LongListSelector 35 Microsoft confidential
  • 37. Windows 8 / Windows Phone 8 Apps Are a Perfect Match • Abstracting Models, ViewModels • Binding data to the View • Linked files • Models, Services could be encapsulated in Portable Class Libraries • Shared APIs (hardware, storage, base class libraries) • Using #if conditionals for small code differences • Using Extension methods to bridge implementation differences • Async-await model for HttpWebResponse/Request • Focus on the user experience that works for the form factor 37 Microsoft confidential 12/6/2012
  • 38. The information herein is for informational interpreted to be a commitment on the part of purposes only an represents the current view of Microsoft, and Microsoft cannot guarantee the Microsoft Corporation as of the date of this accuracy of any information provided after the presentation. Because Microsoft must respond date of this presentation. to changing market conditions, it should not be MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

Editor's Notes

  • #2: Welcome to Cross Development for Windows 8 and Windows Phone 8. In the next hour we’re going to go over the best practices, tips and tricks for developing applications that will delight users across devices powered by both Windows 8 and Windows Phone 8.
  • #5: Right off the bat, we can see we have a similar structure. App.xaml handles our resource management, App.xaml.cs handles launching and suspension methods, the MainPage.xaml page contains the UI and has been set to the initial screen on startup.The big difference between these two projects is that the Windows Phone 8 version has been prepared to make localization a little easier.But the bulk of the functionality that we want to look at is in the MainPage.xaml.cs
  • #6: So lets look at implementing common APIs between Windows 8 and Windows Phone 8
  • #8: But no! Because we’re going to add the files as links into our Windows Phone 8 project. We just right click in our project, add an existing item and make sure that we “Add as Link” instead of a simple “Add”. This way when we change the file, all the changes will be implemented in both application and we won’t be stuck going back and forth copying code between our apps.
  • #9: And we can see our linked classes in our Windows Phone 8 application. Perfect. Nice, healthy shared code between both projects.
  • #10: So what kind of common code can we expect to have across our projects? The commonalities include the .NET Base Class Library, as well as Hardware and Storage APIs. This is where we see the common Windows Runtime Kernel running across Windows 8 and Windows Phone paying off. But we’ll need to pause when we’re using launchers, choosers and sharing APIs that push us out to functionality that reaches beyond our application. These have been implemented differently in Windows 8 and in Windows Phone 8 because they are going to have different launcher and chooser applications and native capabilities. And the way we share and launch external functionality has been carefully designed to create the best user experience on each platform.
  • #11: No, of course not. If we have a situation where there are small difference in code compatibilities, we can use compiler conditional statements to separate the incompatible lines. In the case of Windows 8 development we would say #if NETFX_CORE and for Windows Phone we have the slightly more obvious #if WINDOWS_PHONE. We should consider using this implementation when there are small differences, this isn’t a catch-all approach. If we over use it, we can make our code unreadable, unmaintainable and just plain ugly. But it is perfect for situations where you require a specific namespace for your app (for example the Windows.UI.Xaml namespace which exists in Windows 8 but not in Windows Phone) or if there are small method differences.
  • #12: So we can handle this threading dispatcher issue using compiler conditionals and now we have fully functioning accelerometer code that works on both platforms.
  • #13: We have to add a name for our app and, well, this is on a phone and I hate having to do all that typing so I think we should add a simple web service that can go out and get some suggestions for us while we type.
  • #14: In Windows 8, we can hit that web service using the very elegant async-await model. GetResponseAsync and all our async goodness is handled for us. We don’t need a callback, we don’t need to fire any events or construct any listeners, we can just await the response.
  • #15: But in Windows Phone 8, we don’t have that option. This isn’t really a problem that can be solved using compiler conditionals because that would require a very impressive kind of code gymnastics. We need the Windows Phone version of the HttpWebResponse and HttpWebRequest to work in an async manner.
  • #16: So lets look at implementing common APIs between Windows 8 and Windows Phone 8
  • #17: For this we can use Extension methods to encapsulate the functionality of the HttpWebRequest in such a way as to make it async. Using the TaskCompletionSource, we can wrap the HttpWebRequest in such a way that it returns a task. We give it the same name… GetResponseAsync()… that it has in Windows 8.
  • #18: And now our Web Service works exactly the same using exactly the same async-await model across both platforms. This compatibility trickles down through our application so that now, because our HttpWebRequest is awaitable, so is our service and we can use it the same way in our ViewModel when we want to get new data.
  • #19: MVVMAbstraction pattern
  • #20: Model – Not UI relatedView Model – Encapsulates hat to display and flow of interactionView – Defines dow to display information from the View ModelHow does this relate to portable libraries? View – needs to be different per platform. View Model and Model can be the same between platforms.So this pattern is ideally suited for creating cross-platform apps, because it encourages a clean separation between the parts of your code that should be shared and those that are platform specific
  • #21: We can do better! Developers should expect that they can write a library that uses APIs that are available on multiple platforms and use that library unchanged on those platforms.
  • #22: Portable: BCL, XML, LINQ, XLINQ, WCF, Networking, ViewModel types, DataContract/XML/Json serialization, Data annotationsNot Portable: UI, File system or other persisted storage access, interaction with OS (notifications, picture choosers, win8 contracts, app lifecycle, etc)
  • #23: What besides the UI wasn’t portable? File system, interaction with the OS.The View Models and Models will need that functionality. So…
  • #25: Huh. We may wonder what went wrong here. The answer is “nothing”. The XAML is acting just the way it is supposed to act. It compiles, it runs, everything from the default styling to the user interactions all work. However, let’s take one step back and talk about the most important element of cross development between Windows 8 and Windows Phone 8.
  • #26: We need to keep in mind we’re looking at two very different form factors. Windows Phone runs at 3 resolutions, on phone screens from 3.5 inches to 4.8 inches. Windows 8 runs on screen resolutions to 1024x768 to 2,560 x 1,440 although this is by no means a limit. Windows 8 powers 10 inch tablets and 82 in screens that take up the entire wall.
  • #27: The same goes for orientation. Windows Phone supports portrait and landscape mode, but Windows 8 supports Portrait, landscape and the third-screen snapped mode. Each of these modes requires consideration in design, spacing, an interaction.
  • #28: To aid in these considerations, Windows 8 and Windows Phone 8 have unique controls that have been designed with their particular form factors in mind. Some of the specialized controls for Windows 8 include GridView: (groupable) tile array. Also possible to dynamically size items in the grid. The GridView comes with built in styles for input and selectionSemanticZoom: Allows for quick jump through large lists of grid itemsFlipView: Browsing view optimised for touch to pane left-right through sequential items.
  • #29: To aid in these considerations, Windows 8 and Windows Phone 8 have unique controls that have been designed with their particular form factors in mind. Some of the specialized controls for Windows 8 include GridView: (groupable) tile array. Also possible to dynamically size items in the grid. The GridView comes with built in styles for input and selectionSemanticZoom: Allows for quick jump through large lists of grid itemsFlipView: Browsing view optimised for touch to pane left-right through sequential items.
  • #30: To aid in these considerations, Windows 8 and Windows Phone 8 have unique controls that have been designed with their particular form factors in mind. Some of the specialized controls for Windows 8 include GridView: (groupable) tile array. Also possible to dynamically size items in the grid. The GridView comes with built in styles for input and selectionSemanticZoom: Allows for quick jump through large lists of grid itemsFlipView: Browsing view optimised for touch to pane left-right through sequential items.
  • #31: On the Windows Phone side of things, we have controls customized to a phone experience. The Panorama control is designed to give users a sort of “landing” space where they can get a feel for the content of the application explore that content in an open interactive environment.
  • #32: If the Panorama is the open, casual inviting control for introducing the user to the content, think of the pivot as the no-nonsense control for delivering content. With the Panorama, the user can see what is just around the corner, so to speak, but with the Pivot control, the focus is on the content in front of me right this moment. We still have quick easy access to additional content, but the focus is a little different.
  • #33: New to Windows Phone 8 is the LongListSelector control. This is the recommended control for list-based UI’s, replacing the ListBox. It is optimized for scrolling speed, but also implements a “group selection” interface so that the user can move quickly between grouped items in a very long list. Here we can see that group selection applied to an alphabetical list, but you could define a set of groups and then use the group selection to navigate between them.
  • #34: So what does this mean practically? It means that when we’re thinking about how we’re going to design our two applications, we should consider making use of the customized UI features of either Windows 8 or Windows Phone 8. For example, the semantic zoom control lets us see groups of items at a high level and then drill into them until we select one. That behaviour is similar in many ways to what the pivot control does. We should consider using the Pivot for the Phone and the SemanticZoom for Windows 8.
  • #35: And when we select an item? Windows 8 has a very powerful paradigm of horizontal scrolling, but it’s a paradigm that doesn’t make sense in the context of a phone. So instead of mimicking the horizontal scrolling UI we see in Windows 8, we should translate that into a vertical scrolling UI that fits the phone more appropriately.
  • #36: And if we have a long list of grouped items in Windows Phone 8, we might want to consider implementing them as a GridView in Windows 8. We just need to keep in mind that this is less about mimicking
  • #37: So you can see our ball moves around just fine on both platforms using the same code. But remember how we can save the game and recall it later on another device? Let’s try doing that. We have to add a name for our app and, well, this is on a phone and I hate having to do all that typing so I think we should add a simple web service that can go out and get some suggestions for us while we type.
  • #38: In summary…