3-741: Moving to the Universal Windows Platform: Porting an App from Windows 8.1 XAML or Windows Phone Silverlight to Windows 10

Do you have a Windows 8.1 or Silverlight app today? Want to take advantage of moving to a single code base and delivering your app with ease on to multiple Windows devices? Come learn about porting strategies of moving your existing code to the Universal Windows Platform (UWP) for Windows 10 What works, what's difficult and how to be most productive in getting to Windows 10 quickly.

1.0x

3-741: Moving to the Universal Windows Platform: Porting an App from Windows 8.1 XAML or Windows Phone Silverlight to Windows 10

Created 2 years ago

Duration 0:58:26
lesson view count 303
Do you have a Windows 8.1 or Silverlight app today? Want to take advantage of moving to a single code base and delivering your app with ease on to multiple Windows devices? Come learn about porting strategies of moving your existing code to the Universal Windows Platform (UWP) for Windows 10 What works, what's difficult and how to be most productive in getting to Windows 10 quickly.
Select the file type you wish to download
Slide Content
  1. Sam Jarawan – samjar@microsoft.com

    Slide 1 - Sam Jarawan – samjar@microsoft.com

    • Principal Program Manager – XAML UI Framework
    • Moving to Universal Windows Platform: Porting an App from Windows 8.1 XAML or Windows Phone Silverlight to Windows 10
    • 3-741
  2. Sam Jarawan – samjar@microsoft.com

    Slide 2 - Sam Jarawan – samjar@microsoft.com

    • Principal Program Manager – XAML UI Framework
    • Moving to Universal Windows Platform: Porting an App from Windows 8.1 XAML or Windows Phone Silverlight to Windows 10
    • 3-741
  3. Why move to Universal Windows Platform (UWP)?

    Slide 3 - Why move to Universal Windows Platform (UWP)?

    • Develop a Porting Strategy
    • Porting demo
    • Upgrade breaking changes
    • Silverlight apps
    • Agenda slide
  4. 1,000,000,000 DEVICES!!!

    Slide 4 - 1,000,000,000 DEVICES!!!

    • New features (Inking, Cortana, AllJoyn, …)
    • Innovation will happen here first
    • Performance Improvements
    • XBF v2, Startup perf (Defer), Text Performance, …
    • Single code base
    • Why move your apps to UWP?
  5. Windows Store 8 XAML apps

    Slide 5 - Windows Store 8 XAML apps

    • Windows Phone 8 XAML apps
    • Universal Windows 8 apps (dual head)
    • Windows Phone Silverlight 8.x apps
    • Porting from…
  6. Upgrading a XAML app

    Slide 6 - Upgrading a XAML app

  7. No upgrade script in current tools

    Slide 7 - No upgrade script in current tools

    • In the past we performed inline upgrades
    • Do you need to support old versions?
    • Is it easier to add UWP project to existing solutions?
    • We want to get feedback on the best way to upgrade your apps
    • Create a new UWP project in same solution
    • Copy code to new project
    • Add References if applicable
    • Modify Manifest file (add capabilities, BG Tasks,…)
    • Build -> Fix -> Build -> repeat…
    • General Porting Process
  8. Coming up with a Porting Strategy

    Slide 8 - Coming up with a Porting Strategy

  9. Use a single UWP to target all Windows 10 devices

    Slide 9 - Use a single UWP to target all Windows 10 devices

    • Use adaptive code for device family specific APIs
    • Use adaptive/responsive/tailored UI for different screen sizes
    • Optionally use shared projects/PCLs to share between UWP and Windows 8 apps
    • Porting from a Single Windows/Phone Project
  10. These are dual “head” solutions (Windows 8.1 and Windows Phone 8.1) with a shared project

    Slide 10 - These are dual “head” solutions (Windows 8.1 and Windows Phone 8.1) with a shared project

    • Upgrading a Windows 8 Universal Solution
  11. Use a single UWP to target all devices

    Slide 11 - Use a single UWP to target all devices

    • Create separate UWPs targeting device families (Desktop/Mobile/Xbox/IoT/…)
    • Example
    • Single UWP App to target Mobile and Single UWP to target all others
    • Example Manifest entry
    • <Dependencies>
    • <TargetDeviceFamily Name="Windows.Mobile"
    • MinVersion="10.0.1.0" MaxVersionTested="10.0.1.0" />
    • Upgrading Options
  12. Single shared project for Windows 8.1, Windows Phone 8.1 and 10.0 UWP Apps

    Slide 12 - Single shared project for Windows 8.1, Windows Phone 8.1 and 10.0 UWP Apps

    • One shared project for Windows 8.1/Windows Phone 8.1 Apps and another for 10.0 UWP Apps
    • One Shared for Windows Phone 8.1 and 10.0 mobile, another for Windows 8.1 and 10.0 UWP Apps.
    • Code Sharing Options
  13. Use a single UWP to target all devices

    Slide 13 - Use a single UWP to target all devices

    • Create separate UWPs targeting device families (Desktop/Mobile/Xbox/IoT/…)
    • Example
    • Single UWP App to target Mobile and Single UWP to target all others
    • Example Manifest entry
    • <Dependencies>
    • <TargetDeviceFamily Name="Windows.Mobile"
    • MinVersion="10.0.1.0" MaxVersionTested="10.0.1.0" />
    • Upgrading Options
  14. Single shared project for Windows 8.1, Windows Phone 8.1 and 10.0 UWP Apps

    Slide 14 - Single shared project for Windows 8.1, Windows Phone 8.1 and 10.0 UWP Apps

    • One shared project for Windows 8.1/Windows Phone 8.1 Apps and another for 10.0 UWP Apps
    • One Shared for Windows Phone 8.1 and 10.0 mobile, another for Windows 8.1 and 10.0 UWP Apps.
    • Code Sharing Options
  15. Add a single UWP Project

    Slide 15 - Add a single UWP Project

    • Merge all code into single solution, create single adaptable views
    • Self contained not leveraging shared code
    • Strategy Option 1
  16. Create separate UWPs targeting device families

    Slide 16 - Create separate UWPs targeting device families

    • One for Mobile
    • One for all others
    • Self contained leveraging own set of shared code
    • Strategy Option 2
  17. Add a new UWP “Head”

    Slide 17 - Add a new UWP “Head”

    • Shares same code as 8.1 projects
    • Use #if’s for API differences in shared code if needed
    • Strategy Option 3
  18. Add multiple new UWP “Heads”

    Slide 18 - Add multiple new UWP “Heads”

    • One for Mobile
    • One for all others
    • Shares same code as 8.1 projects
    • Use #if’s for API differences in shared code if needed
    • Strategy Option 4
  19. Build Breaks

    Slide 19 - Build Breaks

    • APIs moved between UWP and extension SDKs (ex: camera button)
    • Deprecated APIs (ex: no charms bar for 10.0 UWP apps)
    • Runtime breaks
    • Missing XAML resource styles
    • Phone* resources gone (ex: PhoneAccentBrush)
    • See Dev Center for Design Guidelines and type ramp (link at end)
    • User Experience Breaks
    • Upgrade breaking changes to Controls
    • Design Refresh
    • ex: GridView now flows vertically instead of horizontal
    • Areas to address while porting
  20. DemoMigrating a real Windows 8.1 app to UWP (Option 3)(goal: get your code up and running)

    Slide 20 - DemoMigrating a real Windows 8.1 app to UWP (Option 3)(goal: get your code up and running)

  21. DemoMigrating a real Windows 8.1 app to UWP (Option 3)(goal: get your code up and running)

    Slide 21 - DemoMigrating a real Windows 8.1 app to UWP (Option 3)(goal: get your code up and running)

  22. DemoMigrating a real Windows 8.1 app to UWP (Option 3)(goal: get your code up and running)

    Slide 22 - DemoMigrating a real Windows 8.1 app to UWP (Option 3)(goal: get your code up and running)

  23. XAML

    Slide 23 - XAML

    • Manifest
    • Scale factors
    • Other upgrade breaking changes to consider
  24. XAML

    Slide 24 - XAML

  25. Default theme changes

    Slide 25 - Default theme changes

    • Light on Desktop (but dark in 8.1)
    • Set RequestedTheme=“Dark” if you want old behavior
    • AppBar and CommandBar
    • IsSticky=true makes it not light dismissible
    • SearchBox is not converged
    • use AutoSuggestBox
    • Date/TimePicker
    • Converged - visual changes (8.1 phone goes to selection page)
    • Pivot control is converged
    • XAML Upgrade Breaking Changes
  26. GridView/ListView

    Slide 26 - GridView/ListView

    • GridView – new vertical flow instead of horizontal
    • New visuals for selection model
    • Deprecated swipe gesture
    • SemanticZoom
    • Zoom out by tapping a group header, pinch zoom can be re-enabled
    • Mobile – no longer zooms out to entire screen, constrained by bounds of control
    • ContentDialog
    • More flexible than MessageDialog
    • Some missing ‘UnConverged’ Styles
    • Some Phone* & Phone Control styles that didn’t end up in converged controls
    • XAML Upgrade Breaking Changes
  27. Manifest Differences

    Slide 27 - Manifest Differences

  28. 8.1

    Slide 28 - 8.1

    • <Package
    • xmlns="http://schemas.microsoft.com/appx/2010/manifest"
    •     xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest">
    • <Identity Name="78ec24f6-149a-47aa-b5a2-f854ab7119f5"
    • Publisher="CN=samjar"
    • Version="1.0.0.0" />
    • <Properties>
    • <DisplayName>My Awesome App</DisplayName>
    • <PublisherDisplayName>samjar</PublisherDisplayName>
    • <Logo>Assets\StoreLogo.png</Logo>
    • </Properties> 
    • <Resources>
    •   <Resource Language="en-us"/>
    •  < Resource m2:Scale="180"/>
    •  < Resource m2:DXFeatureLevel="dx11"/>
    • </Resources>
    •  …
    • Namespace Changes
    • 10.0
    • <Package 
    • xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
    • xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10">
    • <Identity Name="a6db432c-3f41-4475-ae4f-0e3168636cd2"
    • Publisher="CN=samjar"
    • Version="1.0.0.0" />
    • <Properties>
    • <DisplayName>My Amazing App</DisplayName>
    • <PublisherDisplayName>samjar</PublisherDisplayName>
    • <Logo>Assets\StoreLogo.png</Logo>
    • </Properties>
    • <Resources>
    • <Resource Language="en-us"/>
    • <Resource uap:Scale="180"/>
    • <Resource uap:DXFeatureLevel="dx11"/>
    • </Resources>
  29. Example

    Slide 29 - Example

    • <Capabilities>
    • <uap:Capability Name="documentsLibrary"/>
    • <uap:Capability Name="removableStorage"/>
    • </Capabilities>
    • Capabilities that need “uap:” Prefixes
    • documentsLibrary
    • picturesLibrary
    • videosLibrary
    • musicLibrary
    • enterpriseAuthentication
    • sharedUserCertificates
    • removableStorage
    • Appointments
    • Contacts
  30. 8.1

    Slide 30 - 8.1

    • <Prerequisites>
    • <OSMinVersion>6.3.0</OSMinVersion>
    • <OSMaxVersionTested>6.3.0</OSMaxVersionTested>
    • </Prerequisites>
    • Targeting
    • 10.0
    • <Dependencies>
    • <TargetDeviceFamily
    • Name="Windows.Universal"
    • MinVersion="10.0.10053.0"
    • MaxVersionTested="10.0.10053.0" />
    • </Dependencies>
  31. 8.1

    Slide 31 - 8.1

    • <m2:VisualElements
    • DisplayName="My Awesome App"
    • Square150x150Logo="Assets\Logo.png"
    • Square30x30Logo="Assets\SmallLogo.png"
    • Description="My Awesome App“
    • BackgroundColor="#464646"
    • ForegroundText="light“
    • ToastCapable=“True”>
    • <m2:SplashScreen Image="Assets\SplashScreen.png" />
    • <m2:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square70x70Logo=“70x70.png”
    • DefaultSize=“square150x150Logo”/>
    • <m2:ApplicationView MinWidth=“width320”/>
    • </m2:VisualElements>
    • * Deprecated
    • VisualElement Differences
    • 10.0
    • <uap:VisualElements
    • DisplayName="My Amazing App"
    • Square150x150Logo="Assets\Logo.png"
    • Square44x44Logo="Assets\SmallLogo.png"
    • Description="My Amazing App"
    • BackgroundColor="#464646">
    • <uap:SplashScreen
    • Image="Assets\SplashScreen.png" />
    • <uap:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square71x71Logo=“71x71.png”/>
    • </uap:VisualElements>
  32. 8.1

    Slide 32 - 8.1

    • <m2:VisualElements
    • DisplayName="My Awesome App"
    • Square150x150Logo="Assets\Logo.png"
    • Square30x30Logo="Assets\SmallLogo.png"
    • Description="My Awesome App“
    • BackgroundColor="#464646"
    • ForegroundText="light“
    • ToastCapable=“True”>
    • <m2:SplashScreen Image="Assets\SplashScreen.png" />
    • <m2:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square70x70Logo=“70x70.png”
    • DefaultSize=“square150x150Logo”/>
    • <m2:ApplicationView MinWidth=“width320”/>
    • </m2:VisualElements>
    • * Deprecated
    • Namespace changes
    • 10.0
    • <uap:VisualElements
    • DisplayName="My Amazing App"
    • Square150x150Logo="Assets\Logo.png"
    • Square44x44Logo="Assets\SmallLogo.png"
    • Description="My Amazing App"
    • BackgroundColor="#464646">
    • <uap:SplashScreen
    • Image="Assets\SplashScreen.png" />
    • <uap:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square71x71Logo=“71x71.png”/>
    • </uap:VisualElements>
  33. 8.1

    Slide 33 - 8.1

    • <m2:VisualElements
    • DisplayName="My Awesome App"
    • Square150x150Logo="Assets\Logo.png"
    • Square30x30Logo="Assets\SmallLogo.png"
    • Description="My Awesome App“
    • BackgroundColor="#464646"
    • ForegroundText="light“
    • ToastCapable=“True”>
    • <m2:SplashScreen Image="Assets\SplashScreen.png" />
    • <m2:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square70x70Logo=“70x70.png”
    • DefaultSize=“square150x150Logo”/>
    • <m2:ApplicationView MinWidth=“width320”/>
    • </m2:VisualElements>
    • * Deprecated
    • Tile Size Differences
    • 10.0
    • <uap:VisualElements
    • DisplayName="My Amazing App"
    • Square150x150Logo="Assets\Logo.png"
    • Square44x44Logo="Assets\SmallLogo.png"
    • Description="My Amazing App"
    • BackgroundColor="#464646">
    • <uap:SplashScreen
    • Image="Assets\SplashScreen.png" />
    • <uap:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square71x71Logo=“71x71.png”/>
    • </uap:VisualElements>
  34. 8.1

    Slide 34 - 8.1

    • <m2:VisualElements
    • DisplayName="My Awesome App"
    • Square150x150Logo="Assets\Logo.png"
    • Square30x30Logo="Assets\SmallLogo.png"
    • Description="My Awesome App“
    • BackgroundColor="#464646"
    • ForegroundText="light“
    • ToastCapable=“True”>
    • <m2:SplashScreen Image="Assets\SplashScreen.png" />
    • <m2:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square70x70Logo=“70x70.png”
    • DefaultSize=“square150x150Logo”/>
    • <m2:ApplicationView MinWidth=“width320”/>
    • </m2:VisualElements>
    • Deprecated Elements
    • 10.0
    • <uap:VisualElements
    • DisplayName="My Amazing App"
    • Square150x150Logo="Assets\Logo.png"
    • Square44x44Logo="Assets\SmallLogo.png"
    • Description="My Amazing App"
    • BackgroundColor="#464646">
    • <uap:SplashScreen
    • Image="Assets\SplashScreen.png" />
    • <uap:DefaultTile
    • ShortName=“MyApp”
    • Wide310x150Logo=“310x150.png”
    • Square310x310Logo=“310x310.png”
    • Square71x71Logo=“70x70.png”/>
    • </uap:VisualElements>
  35. If updating from Windows Phone ensure <PhoneIdentity> matches what you had before

    Slide 35 - If updating from Windows Phone ensure <PhoneIdentity> matches what you had before

    • Ensures users upgrading from Phone 8.x will receive your new app as an update, rather than a duplicate
    • <mp:PhoneIdentity
    • PhoneProductId="ca6e747f-41ba-422c-9f7b-e78f080c9dd7“
    • PhonePublisherId="00000000-0000-0000-0000-000000000000" />
    • PhoneIdentity
  36. A few more changes to be aware of

    Slide 36 - A few more changes to be aware of

  37. Application View Class

    Slide 37 - Application View Class

    • PreferredLaunchWindowingMode
    • Modes: Auto, PrefferredLaunchViewSize & FullScreen
    • PreferLaunchViewSize
    • SetPreferredMinSize
    • Default min size: 500x320px
    • Largest min size: 500x500px
    • Example
    • ApplicationView.GetForCurrentView().SetPreferredMinSize(
    • new Size { Width = 320, Height = 320 });
    • Window Sizes (launch and min size)
  38. Desktop: Enable Chrome back button (coming soon)

    Slide 38 - Desktop: Enable Chrome back button (coming soon)

    • Single converged back button API
    • Example:
    • protected override void OnNavigatedTo(NavigationEventArgs e)
    • {
    • var frame = Window.Current.Content as Frame;
    • if (frame.CanGoBack)
    • {
    • SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
    • }
    • else
    • {
    • SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
    • }
    • Window.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += Page_BackReqested;
    • }
    • Handling Back Button
  39. Single scale factor system for all apps

    Slide 39 - Single scale factor system for all apps

    • Great alignment with other app platforms
    • Guarantees consistent visual size of text and graphics (abstracts panel density and viewing distance for you)
    • 100%, 200% and 400% are the most important sizes to support in assets
    • Scale factors work well with 4-px grid
    • See session 2-63 Display Scaling: Why it matters for more details
    • New scale factors
    • Scale Factors
    • 100
    • 125
    • 150
    • 200
    • 250
    • 300
    • 400
  40. Old scale factors may be larger now

    Slide 40 - Old scale factors may be larger now

    • 140% -> 150% , 180% - > 200%?
    • Visual refresh has changed font sizes
    • Ex: TitleTextBlockStyle
    • (8.1) FontSize=14.667 (10.0) FontSize=24
    • Example (left 8.1 App, Right 10.0)
    • Scaling gotcha’s
  41. Supporting fluid/responsive/tailored design

    Slide 41 - Supporting fluid/responsive/tailored design

    • Resizable desktop windows
    • Phone/Phablet/Tablet/2:1s/Laptops/IoT/HoloLens/Surface Team/Xbox/…
    • Adding new features
    • Inking, Cortana, AllJoyn, CalendarView, SplitView, …
    • Performance Improvements
    • Compiled Bindings - x:Bind
    • List Panning, Chromed Visuals, Software Bitmap Source
    • Taking the app forward
  42. Silverlight Phone Apps

    Slide 42 - Silverlight Phone Apps

  43. Great content on migrating from SL app to 8.1 XAML on Windows Dev Center

    Slide 43 - Great content on migrating from SL app to 8.1 XAML on Windows Dev Center

    • https://msdn.microsoft.com/en-us/library/windows/apps/dn642486(v=vs.105).aspx
    • https://msdn.microsoft.com/en-us/library/windows/apps/hh465136.aspx
    • API Mappings
    • https://msdn.microsoft.com/en-us/library/windows/apps/dn800286.aspx
    • New porting tool coming
    • Porting a Windows Silverlight app
  44. Different RunTimes

    Slide 44 - Different RunTimes

    • Most of your knowledge and experience will transfer
    • As well as much of your source code and UI markup
    • Views
    • Apps UI should be straightforward to port, some differences in controls
    • ViewModel and DataModel
    • Much of this should port over without much change
    • Cloud Services
    • Should port over without much change, different SDKs generally required
    • Assets
    • ReUsable
    • Porting a Windows Phone Silverlight App
  45. Similar approach to porting XAML apps

    Slide 45 - Similar approach to porting XAML apps

    • Create new UWP project in same solution
    • Copy files over
    • Add new references
    • Modify manifest file
    • Build -> fix -> build -> …
    • Differences in namespace and class names will generate lots of build errors
    • UX will most likely be ‘phone’ designed
    • Porting to a Windows 10 UWP Project
  46. Free Visual Studio Add-In

    Slide 46 - Free Visual Studio Add-In

    • Converts Silverlight Windows Phone apps to Windows 10 apps
    • Enables the top 80% of apps to be converted 80% of the way
    • Includes mappings for top components (>1200)
    • Supports open source extensibility model – anyone can contribute
    • Get on the pre-release at www.mobilize.net/build
    • See a demo in the demo zone area on the second floor
    • Silverlight Conversion Tool – Mobilize.Net
  47. Similar approach to porting XAML apps

    Slide 47 - Similar approach to porting XAML apps

    • Create new UWP project in same solution
    • Copy files over
    • Add new references
    • Modify manifest file
    • Build -> fix -> build -> …
    • Differences in namespace and class names will generate lots of build errors
    • UX will most likely be ‘phone’ designed
    • Porting to a Windows 10 UWP Project
  48. Port your apps, let us know how it goes!

    Slide 48 - Port your apps, let us know how it goes!

    • What tooling could we offer to make this better?
    • Check out the other XAML talks to take your app forward after porting
    • Call to Action
  49. Slide 49

    • Must See Talks
    • Speakers
    • Session Code
    • What's New in XAML for Universal Windows Apps
    • Joe Stegman
    • 629
    • Introducing the App Model for the Universal Windows Platform (UWP)
    • Andrew Clinick
    • Matt Hidinger
    • 617
    • App Lifecycle: From Activation and Suspension to Background Execution and Multitasking in Universal Windows Apps
    • Shawn Henry
    • John Vintzel
    • 626
    • Data Binding: Boost Your App’s Performance Through New Enhancements to XAML Data Binding
    • Chipalo Street
    • Sam Spencer
    • 635
    • From the Small Screen to the Big Screen: Building Universal Windows App Experiences with XAML
    • Tim Heuer
    • Harini Kannan
    • 679
    • XAML Performance: Techniques for Maximizing Universal Windows App Experiences Built with XAML
    • Mark Alcazar
    • Kiran Kumar
    • 689
    • API Contracts (or How I Learned to Stop Checking OS Versions and Love Feature Detection)
    • Brent Rector
    • 733
    • Navigation and Windowing in Windows Apps
    • Roberth Karman
    • 779
    • Display Scaling: What it is and why it matters to you
    • Steve Wright
    • 263
    • New XAML Tools in Visual Studio 2015
    • Unni Ravindranathan
    • 697
  50. Come by the Windows Insiders lounge on the second floor for the next 90 minutes…

    Slide 50 - Come by the Windows Insiders lounge on the second floor for the next 90 minutes…

    • Additional information @
    • Upgrading your apps
    • http://msdn.microsoft.com/library/dn975273.aspx
    • Designing UWP Apps
    • http://dev.windows.com/en-us/design
    • Questions?
  51. Come by the Windows Insiders lounge on the second floor for the next 90 minutes…

    Slide 51 - Come by the Windows Insiders lounge on the second floor for the next 90 minutes…

    • Additional information @
    • Upgrading your apps
    • http://msdn.microsoft.com/library/dn975273.aspx
    • Designing UWP Apps
    • http://dev.windows.com/en-us/design
    • Questions?