What's New in Windows 10 for developers

Windows 10 version 1703 and updates to Windows developer tools continue to provide the tools, features, and experiences powered by the Universal Windows Platform. Install the tools and SDK on Windows 10 and you’re ready to either create a new Universal Windows app or explore how you can use your existing app code on Windows.

This is a collection of new and improved features of interest to developers. For a full list of new namespaces added to the Windows SDK, see the Windows 10 version 1607 API changes. For more information on the highlighted features of Windows 10, see What's cool in Windows 10. In addition, see Windows Developer Platform features for a high-level overview of both past and future additions to the Windows platform.

Windows 10 version 1703 - March 2017

Feature Description
Background tasks Background tasks can now be registered in groups, which provide the rough equivalent of a namespace for background tasks. You can register/unregister background tasks as part of a group to isolate those registrations. This isolation is useful to ensure that different components of an app, or different libraries, don’t interfere with each other’s background task registration.
Enterprises can enable or disable background activity for UWP apps based on their package friendly name.

Background tasks can now be multi-instance. You can specify that each instance runs in a new process that has its own CPU and memory limits.
Bluetooth Low Energy Publishing Generic Attributes (GATT) services are now supported in the foreground GattServiceProvider class and background GattServiceProviderTrigger class.
Bluetooth peripheral role is now available on supported radios. Use IsPeripheralRoleSupported to check for support.

Communicate with Bluetooth low energy devices without pairing devices first. See Windows.Devices.Bluetooth.BluetoothLEDevice and the APIs that are enabled for unpaired connections in the GenericAttributeProfile namespace.
Composition There are many new or updated APIs in the Windows.UI.Composition namespace:
* AnimationDelayBehavior enum
* CompositionCapabilities class
* CompositionDrawingSurface class
* CompositionGraphicsDevice class
* CompositionVirtualDrawingSurface class
* Compositor class
* KeyFrameAnimation class
* Visual class
* CompositionConditionalValue class
* InteractionTracker class
* VisualInteractionSource class
Contacts Pin contacts to the taskbar or to the Start menu. Make contact information appear in the new light-weight Contact Panel that appears when users can click a pinned contact. Enable users to choose a link in the Contact Panel to view a contact in your app.
Customer orders database sample update The Customer orders database sample on GitHub was updated to make use of the data grid control and data entry validation from Telerik, which is part of their UI for UWP suite. The UI for UWP suite is a collection of over 20 controls that is available as an open source project through the .NET foundation.
Desktop Bridge New app extensions help you transition users to the converted version of your app, integrate with File Explorer, enable users to start your app in more ways, and integrate with other apps. See Desktop to UWP Bridge: App extensions.
Start processes that are outside of your app’s package and run them inside of your converted app’s virtualized environment. Those processes will have access to app resources such as dll files. See the PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY attribute in the UpdateProcThreadAttribute function.
Direct3D New APIs have been added to Direct3D 12 to support atomic buffer copies (enables late-latch techniques), programmable sample positions, depth-bounds testing, residency priorities, and more.
Fence APIs have been added to support multi-device scenarios in Direct3D 11 and interop scenarios between Direct3D 11 and Direct3D 12. The runtime now supports OS-managed caching of shaders to improve application load-time and performance.
EdgeHTML 15 The web platform powering Microsoft Edge and JS-based Universal Windows Platform apps has been updated to EdgeHTML 15 and now includes support for the Payment Request API, WebVR, and Content Security Policy 2, among other things. See the Microsoft Edge Developer Guide for the full list of changes.
FlightStick and RawGameController New APIs have been added to the Windows.Gaming.Input namespace, including support for flight sticks, as well as raw game controllers, which allow you to gather input from any type of controller and let the player choose custom input mappings.
High DPI in Win32 The new "Per-Monitor v2" DPI awareness context has been added to Desktop applications. Per Monitor v2 still automatically adjusts the scale factor of windows whenever the relevant DPI changes, but it also enables applications to access new DPI scaling behaviors on a per top-level window basis.
Ink Ink adds additional support for protractor and ruler stencils, ink input time stamps, refined high contrast highlighter, and creating ink strokes programmatically.
Ink analysis can provide analysis of ink stroke input for Windows Ink apps, including shape detection and recognition, handwriting recognition, and layout interpretation and classification.

General refinements to Ink toolbar have been made, including a stencil button (for ruler and protractor), flyout control types, and flyout location/orientation.

You may now specify inking apps in the Ink Workspace.
Input Injection Input injection provides support for programmatically generating and automating input from a variety of devices.
IoT Updates to Windows IoT Core include support for Cortana, improvements to the IoT Dashboard, Azure Device Management support, and Device Guard for IoT. For a full overview of the newest features, see What's new for Windows 10 IoT Core.
Maps Add an image to a map such as a picture of a restaurant. These images will change size and fade in and out of view based on the zoom level of the map. See the MapBillboard class.
Get elements on a map by using the area that a user touches with their finger or with a pen. See MapControl.FindMapElementsAtOffset.

Add features that let users pan up, down, or sideways on a map. See MapControl.StartContinuousPan and MapControl.TryPanAsync, and MapControl.TryPanToAsync.

Add padding inside of a map control. See MapControl.ViewPadding.

Customize the look and feel of a map by using style sheets. Use predefined style sheets or create custom ones by using JSON. Combine style sheets to create just the right look. See MapControl.StyleSheet and MapStyleSheet.
Map Services Download map packages for offline use. See Windows.Services.Maps.OfflineMaps.
Add via waypoints that lets users control which path they want to take between way points. See EnhancedWayPoint class.

Get estimated travel times without traffic. See MapRouteLeg.DurrationWithoutTraffic, and MapRoute.DurationWithoutTraffic.

Get traffic congestion levels. See MapRouteLeg.TrafficCongestion, and MapRoute.TrafficCongestion.

Identify potential issues along a route or route leg such as a road being unpaved, weather along the road, or scheduled events in the area. See MeneuverWarning.
Media capture The CaptureDeviceExclusiveControlStatusChanged event has been introduced to enable listening for when other apps acquire and release exclusive control of the capture device.
MultiSourceMediaFrameReader has been introduced to allow you to receive time-correlated frames from multiple capture devices.

DepthMediaFrame objects now provide MinReliableDepth and MaxReliableDepth properties to allow clamping of depth values to a reliable range.
Media encoding Use the new CodecQuery class to query for audio and video encoders and decoders installed on the current device.
New static methods have been added for creating encoding properties for HEVC video, CreateHevc, and FLAC and ALAC audio, CreateFlac and CreateAlac.
Media playback CurrentMediaPlaybackItemChangedEventArgs.Reason lets you know why the currently playing track in the list changed, such as the app switching items programatically, the previously playing item reaching its end, or an error occurring.
MaxPlayedItemsToKeepOpen lets you specify the maximum number of MediaPlaybackItem objects that the system will keep open after they have been played.

IsDisabledInPlaybackList allows you to disable playback of individual MediaPlaybackItem objects in a MediaPlaybackItemList.

MediaSource now supports ChapterCue which allows your app to respond when the current chapter (such as those in MKV video) changes. The SpeechCue class has been which allows your app to respond to word boundaries, sentence boundaries, and SSML bookmarks in text-to-speech media. And image-based subtitles (such as VobSub and PGS) are supported with the ImageCue class.

For adaptive streaming, AdaptiveMediaSourceDownloadStatistics and AdaptiveMediaSourceDiagnostics classes have been added to provide telemetry information about adaptive media requests. The event arguments for the status and diagnostic events include a RequestId property, which can be used to correlate the various events for an individual request.

MediaBinder, which allows you to defer binding media content to a MediaSource until it is played, now supports AdaptiveMediaSource.

MediaPlayer now supports spherical video projection, including programmatically setting the field of view and the view orientation for playback.

MediaPlayer can be put into frame server mode by setting the IsVideoFrameServerEnabled property. In this mode, the media player doesn’t present the video frames itself but instead raises the VideoFrameAvailable event for each frame. Use the CopyFrameToVideoSurface method in the handler for the event to copy the frame to an IDirect3DSurface for custom processing with shaders. CopyFrameToStereoscopicVideoSurfaces lets you copy the left and right eye content of a frame to separate surfaces.
Packages Developers can componentize their applications by dividing functionality and content into optional packages. See PackageCatalog.AddOptionalPackageAsync for how to install optional packages from your app and Package.SetInUse for how to control which optional packages get automatically updated by the store when your app is running. To learn how to author optional packages and related sets in Visual Studio, see Optional package and related set authoring.
Payments The new Payment Request API for UWP apps enables developers to streamline the checkout process in their apps.
Simplify payments in UWP apps
Point of Service New APIs have been added to the Windows.Devices.PointOfService namespace, including support for line display POS devices, expanded barcode symbology attributes, and a new method for device selection that can be scoped to specific connection types.
Project Rome SDK for Android The Project Rome feature for UWP has come to the Android platform. Now you can use a Windows or Android device to remotely launch apps and continue tasks on any of your Windows devices. See the official Project Rome repo for cross-platform scenarios to get started.
Surface Dial The RadialController namespace has been updated with more control over menu display, RadialController menu button events, screen contact events, menu button font glyphs, and other haptics controllers.
Use radial controller background processing to manage radial controller input on a background thread.
Speech Synthesis The Speech synthesis stream now supports word and sentence boundaries.
Tasks Create Exchange-style task lists, and add tasks to them. Your app can also read and perform actions on tasks that are created by other apps (For example: Tasks that are created in Microsoft Outlook). See the Windows.ApplicationModel.UserDataTasks and the Windows.ApplicationModel.UserDataTask.DataProvider namespace. The shape and hierarchy of these APIs are similar to the shape and hierarchy of appointments, contacts, and email API namespaces.
UWP App Streaming Install Streaming install lets users launch your app before it has been fully installed, which allows users to engage with your app more quickly. You can define the required files that must be downloaded before your app can be launched and prioritize which files will be downloaded in the background depending on how users engage with your app. See UWP App Streaming Install for an overview of the streaming install concepts and Create and convert a source content group map for how to divide your app into file groups to be streamed.
Visual Studio 2017 A new update is coming to Visual Studio 2017, delivering improvements to the UWP tools to support the release of the Creators Update and the addition of Python tools. Explore an overview of the new features coming in this update.
Windows Information Protection (WIP) Get the primary identity in more convenient ways; by using a property, or by using a secondary or child identity.
Easily determine if any given file does not have to be protected. This saves you from protecting files such as dll files, executables, or other configuration files.

If you’ve protected a file that you need to unprotect, you can now easily remove that protection.

Request temporary access to protected content on behalf of another app or running process. This helps you in cases where your app interacts with protected data with both protected and unprotected processes, or if your app interoperates with other apps that are not on the policies allowed list.

See the ProtectionPolicyManager class and the FileProtectionManager class.
Windows Mixed Reality To support the growing Windows Mixed Reality platform, new APIs have been added to the Windows.Graphic.Holographic, Windows.Perception.Spatial, and Windows.UI.Input.Spatial namespaces.
XAML Controls ContentDialog now has three buttons: Primary, Secondary, and Close. You can also set one of the buttons to be the Default action.
Use the ShowAsMonochrome property to show bitmap icons in a single color or full color.

Use the new SelectionChangedTrigger to change how the ComboBox handles selection by keyboard.

New PrepareConnectedAnimation and TryStartConnectedAnimationAsync APIs on ListViewBase make it easier to use connected animations with list and grid views.

Use the new Icon property to add an icon to a MenuFlyoutItem or MenuFlyoutSubItem.

Use the SvgImageSource class to add an SVG image in XAML.

Use the LoadedImageSurface class to add a composition surface in XAML.
Use the XAMLLight class and UIElement.Lights property to add CompositionLight effects in XAML.
Use the XamlCompositionBrushBase to use composition brushes in XAML.