Category Archives: Tablet

Auto Added by WPeMatico

Microsoft Announces Simplygon Cloud; Optimizes Mixed Reality Development

Earlier this year, we announced the acquisition of Simplygon, a leader in 3D model optimization based in southern Sweden. As we continue our journey to bring the benefits of mixed reality to everyone, Simplygon is an important accelerant that makes it easier, faster, and cheaper to develop in 3D.
Introducing Simplygon Cloud
Today, I am excited to announce the launch of Simplygon Cloud on Azure Marketplace. Simplygon reduces complexity in the creation and extensibility of 3D models through optimization. Simplygon supports GLTF, FBX and OBJ file types for ingestion; rendering engines including Unity 3D and Unreal Engine; and all major mixed reality platforms, including Windows Mixed Reality, iOS and Android. 
How it works
Historically, 3D asset optimization has taken days or weeks of manual effort and is one of the tasks that artists and developers dislike the most. With Simplygon, you can create 3D assets once – at full visual fidelity – and automatically optimize them to render smoothly on any platform – within minutes, saving valuable time and money.

As an example, the above left 3D model of a couch was built with 584,000 polygons. To render this content on a lower GPU device, Simplygon optimized this down to 5,000 polygons, which greatly reduces the file size, while maintaining the ideal visual fidelity for the intended device.
How To Get Started
Simplygon Cloud is now available in the Azure Marketplace. To get started, visit our Azure Marketplace home to learn how to deploy the Simplygon Cloud virtual machine and start optimizing your 3D assets. Please also visit our documentation for examples and more information on how to integrate this into your workflow today.
We look forward to sharing more in the months ahead. This is a very exciting time for everyone who is developing in the era of mixed reality!

Windows Template Studio 1.5 released

We’re extremely excited to announce the Windows Template Studio 1.5.
In this release, we finalized our work for localization, added in some new features, and started work on a bunch of new features and pages.
What’s new:
Full list of adjustments in the 1.5 release, head over to WTS’s Github.

New Features:
Share source, share target
Multi-view
Feedback hub (added in v1.4)
Template improvements:
Minor tweaks for Fluent
Caliburn.Micro Support (added in v1.4)
Improvements to the Wizard:
Localization in all Visual Studio supported language
Adjusted the feature categories
Lots of under the hood bug fixes and code improvements
Much more Visual Basic engine work
Work for supporting multiple projects in a single solution
Work to support Prism
Bug fixes
How to get the update:
There are two paths to update to the newest build.Already installed: Visual Studio should auto update the extension. To force an update, Go to Tools->Extensions and Updates. Then go to Update expander on the left and you should see Windows Template Studio in there and click “Update.”
Not installed: Head to https://aka.ms/wtsinstall, click “download” and double click the VSIX installer.
What else is cooking for next versions?
We love all the community support and participation. In addition, here are just a few of the things we are currently building out that will in future builds:
Image Gallery feature (In nightly)
Web to App Link feature (In nightly)
Visual Basic support (In nightly)
Drag and drop service (in nightly)
Prism support (Soon in nightly)
Improved update system to help increase speed of startup and file size download
Improved user interface in-line with Visual Studio
Continued refinement with Fluent design in the templates
Ink templates
Improved Right-click->add support for existing projects
With partnership with the community, we’ve will continue cranking out and iterating new features and functionality. We’re always looking for additional people to help out and if you’re interested, please head to our GitHub at https://aka.ms/wts. If you have an idea or feature request, please make the request!

Introducing the Web Media Extension Package with OGG Vorbis and Theora support for Microsoft Edge

We’ve heard requests from many of our customers to support additional open-source formats in order to access a broader set of content on the web. To address this, ,we recently added support for the WebM container format and the VP9 and Opus codecs on supported hardware.
Today, we’re excited to announce a new mechanism which will allow our customers to add more formats on demand and increase our agility to add new formats in the future: Media Extensions. Alongside this mechanism, we’re releasing the Web Media Extensions package to the Microsoft Store as a free Media Extension for Microsoft Edge.
Media Extensions
Media on the web has been evolving at a furious rate for the last few years. Adaptive video streaming is now common, providing a simpler mechanism for professional-quality video under changing network and device conditions; HTML5 Premium Media provides the tools for interoperable, plugin-free protected media; plugin-free video and audio conferencing is now routine with tools like WebRTC and ORTC.
We’re proud to be at the leading edge of these features, providing a modern set of capabilities with more efficient and higher quality video in Microsoft Edge. At the same time, we’re always looking to make sure Microsoft Edge meets the needs of our customers and web developers alike, and to provide a seamless playback experience on the web.  The rapid growth in media capabilities has naturally resulted in a need to support more media formats in web browsers.
Media Extensions are Media Foundation components designed to extend the core Windows platform and enable Windows apps including Microsoft Edge to support an ever-increasing range of formats. Media Extensions, much like browser extensions, allow customers to extend their device beyond the core experience shipped as part of Windows 10. It also allows the developers of media technologies to update and enhance media components independently of the Windows 10 release schedule. This allows us to work with the community to deliver high quality, interoperable codecs to Edge customers quickly and reliably.
The Web Media Extensions Package
The Web Media Extensions package adds support for the open source OGG container and the Theora and Vorbis codecs, and it expands support for WebM VP9 to work with Theora in simple video elements.  Our support for these formats is based on proven implementations from the well-known FFmpeg codecs using the FFmpeg Interop library. We expect this set of formats to be useful for enthusiasts and customers with specific format needs and we’re excited to bring support for these FFmpeg formats to Microsoft Edge!
Our initial release of the Web Media Extension package is focused on supporting these developers and customers who know they need support for these formats – the seekers and enthusiasts on the web. In the spirit of flighting, this will allow us to learn and improve based on your feedback before we expand support to the broader range of Edge customers on the market today. Long-term, we expect to expand distribution of the Web Media Extension package to all Windows 10 devices so that these formats become a trusted and reliable part of the web platform available to developers.
Getting started
Developers and customers can get started with these new formats in Microsoft Edge by simply installing the Web Media Extension Package from the Microsoft Store. You can also find the package under the Microsoft Edge Extensions collection in the store. This package extends the base media platform in Windows, so the formats will be available to Windows apps and Microsoft Edge with no further action from the user.
We encourage you to install the extension and try it out today! Going forward, we intend to expand distribution, release more formats as Extensions and work with third parties on new formats for Microsoft Edge – your usage will help validate this approach and help us identify potential issues as we evaluate opportunities to provide these capabilities to our customers.
We’re passionate about providing a high-quality, interoperable media experience in Microsoft Edge. This extension package is a first step forward broadening Microsoft Edge’s playback capabilities while providing new mechanisms for us to deliver expanded support in response to the diverse needs of customers, devices, and different browsing contexts. We look forward to hearing your feedback as we work with the community to move our media platform forward!
— David Mebane, Senior Program Manager, Windows Media Platform— Jerry Smith, Senior Program Manager, Microsoft Edge

Extend your desktop application with Windows 10 features using the new Visual Studio Application Packaging Project

Visual Studio 2017 15.4 introduced the new Windows Application Packaging project to help you modernizing your application by using the new Windows 10 App Deployment Stack.
We talked about it in our previous post: Visual Studio 2017 Update 4 makes it easy to modernize your app and make it store ready and today we want to describe the new capabilities in Visual Studio 2017 15.5 that enable new scenarios to the Windows application packaging project to take advantage of more Windows 10 features in your applications.
During this article we will cover three examples to highlight the new capabilities added to the packaging project to enable packaging for not only Win32 applications, but also UWP applications and components:
Background execution using UWP background tasks.
Windows Shell integration using the Share Target contract.
Include Win32 code investments in your UWP app package.
The first two samples are existing WPF applications packaged as APPX with extended functionality implemented as UWP components. The first application adds background execution based on UWP background tasks, while the second app shows how to deeply integrate the application with the Windows 10 shell using a widely available feature as Share contracts. Finally, the last app is a UWP entry point that calls to a classic Win32 process that interop with Excel.
Note: Because the UWP components require to be compiled for a specific platform: x86 or x64, the Any CPU solution configuration will not work in any of these samples.
All samples are available in the GitHub repo Windows-Packaging-Samples. These samples require Visual Studio 2017 15.5 Preview 4 or greater, available to download from https://www.visualstudio.com/downloads.
1. WPF with Background Tasks
The Universal Windows Platform includes support for advanced background processing. Background tasks allow running code even when the app is suspended. Background tasks are intended for small work items that do not require user interaction, such as downloading mail, showing a toast notification for an incoming chat message or reacting to a change in a system condition.
To show how to use this feature from your Win32 applications, we are going to implement a small utility that will make an HTTP request to a URL configured by the user and will show the elapsed milliseconds in a Toast Notification.

We will create a WPF application to allow the user to specify the URL to check and enable/disable the background task. The background task will be implemented as a Windows Runtime Component (WINMD). To be able to include this component in the package, we need to create a UWP application that uses the component, and finally add the WPF and UWP projects as references to the packaging project. Below is the list of steps needed.
You can find the complete source code of this sample in the GitHub repository, but if you want to create the sample from scratch here are the most important steps.
Package your desktop application using the packaging project
Add a Windows Runtime component to implement the background task
Add a UWP application that reference the runtime component
Add a reference to the UWP application from the packaging project
Configure the Background task in the manifest
Register the background task from the Desktop application
Once you completed steps 1 to 4, you should have a solution for projects as shown in the image below:

The packaging project references not only the WPF application, but also the UWP project. For this reason, the solution needs to be configured for a specific platform, since UWP is not available for Any CPU configurations.
Background Task implementation
The background task is a C# class that implements the IBackgroundTask interface. This interface defines the Run method that will be called when the system triggers the task.

public sealed class SiteVerifier : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{

taskInstance.Canceled += TaskInstance_Canceled;
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
var msg = await MeasureRequestTime();
ShowToast(msg);
deferral.Complete();
}

private async Task<string> MeasureRequestTime()
{
string msg;
try
{
var url = ApplicationData.Current.LocalSettings.Values["UrlToVerify"] as string;
var http = new HttpClient();
Stopwatch clock = Stopwatch.StartNew();
var response = await http.GetAsync(new Uri(url));
response.EnsureSuccessStatusCode();
var elapsed = clock.ElapsedMilliseconds;
clock.Stop();
msg = $"{url} took {elapsed.ToString()} ms";
}
catch (Exception ex)
{
msg = ex.Message;
}
return msg;
}

Note how we use the LocalSettings in ApplicationData to share information between the WPF application and the UWP background task.
To configure the background task, you need to update the manifest using the manifest designer. Go to the declarations tab, add the background task and configure the entry point as the implementation.

To register the background task in the system, we need to call a Windows 10 API from the WPF application. This API is available in the Windows 10 SDK, and to use it from .NET we need to add the references explained here. Once you have access to the Windows 10 API you can use  the BackgroundTaskRegistration class to configure the background task as shown in the code below:

public void RegisterBackgroundTask(String triggerName)
{
var current = BackgroundTaskRegistration.AllTasks
.Where(b => b.Value.Name == triggerName).FirstOrDefault().Value;

if (current is null)
{
BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
builder.Name = triggerName;
builder.SetTrigger(new MaintenanceTrigger(15, false));
builder.TaskEntryPoint = "HttpPing.SiteVerifier";
builder.Register();
System.Diagnostics.Debug.WriteLine("BGTask registered:" + triggerName);
}
else
{
System.Diagnostics.Debug.WriteLine("Task already:" + triggerName);
}
}

To register the background task, first we make sure the task has not been registered before, and then we use the BackgroundTaskBuilder to configure the name and the Trigger, in this case we are using the MainteinanceTrigger.
2. Register your application as Share Target
Share contracts is a Windows 10 feature that allows the sharing of information between two apps, the sender and the receiver. Thanks to the Desktop Bridge, we can register a UWP application as a Share receiver and then integrate with a Win32 application. Once the app is registered, it will be shown every time the user invokes a share operation as shown below:

In this sample, we are extending a WPF application to become a share target where users can send images from other apps like the Photos app, Edge or even the Shell to our application. We are using the packaging project to include not only the WPF application, but also a UWP application that allows a UWP UI to receive events from the share target. Below you can see the solution explorer with the packaging project referencing the WPF and UWP projects.

The package needs to declare the Share Target, including the name of the UWP application:

When the application gets activated, it receives the share target information from the ShareOperation parameter as shown in the code snippet below:

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
operation = (ShareOperation)e.Parameter;
if (operation.Data.Contains(StandardDataFormats.StorageItems))
{
var items = await operation.Data.GetStorageItemsAsync();
file = items[0] as StorageFile;
IRandomAccessStreamWithContentType stream = await file.OpenReadAsync();

await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
{
BitmapImage image = new BitmapImage();
this.img.Source = image;
await image.SetSourceAsync(stream);
});
}
}

Now every time the user shares a picture and selects our application, the Share UI application gets invoked and the UWP UI will be displayed.

After clicking the “Share to WPF app” button, the UWP will process the event handler, and will copy the picture to the ApplicationData folder and run the Win32 application using the FullTrustProcessLauncher.

private async void ShareBtn_Click(object sender, RoutedEventArgs e)
{
await file.CopyAsync(ApplicationData.Current.LocalFolder);
operation.ReportCompleted();
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
}

To use the FullTrustProcessLauncher we will use the Desktop extension to UWP, this extension is available as an SDK reference available in the Add References dialog of the UWP application:

And finally, register the desktop extension and the target executable in the manifest:

<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap mp rescap desktop">
<… >
<desktop:Extension Category="windows.fullTrustProcess"
Executable="WPFPhotoViewerWPFPhotoViewer.exe" />
<… >

3. Enable Office interop from UWP application
One of the key features of the Desktop Bridge is the ability to include Win32 executables on your application package and run those as full trust process from a UWP application. Now, with the Windows Application Packaging project, you can create packages that contain both UWP and Win32 binaries.
Additionally, to the process launcher, the App Service extension will help you to establish a communication channel between your UWP application and the Win32 process.
In this sample we are going to include a Win32 process (a command line application) to manage an Excel worksheet using office interop.
We start with a UWP application that uses the Telerik data grid to show some tabular data, and we will add button to export the same data to Excel as shown in the image below:

The solution explorer of this example looks very similar to our previous example, with three projects in the solution: The UWP application, the Win32 command line and the packaging project with a reference to both projects. However, note that in this case the Application entry point (shown in bold) is the UWP project:

As we did in our previous example, we need to add a reference to the Desktop extension and register the full trust process in the manifest. But this time, we will also register the application service in the package manifest:

To open the communication channel in the Win32 process, we will add a reference to the Windows API as described here:
To establish the connection, we will use the AppServiceConnection class, where we need to specify the package family name of the application we want to connect with, and the event handlers we will use to process the incoming requests.

Connection = new AppServiceConnection();
connection.AppServiceName = "ExcelInteropService";
connection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
connection.RequestReceived += Connection_RequestReceived;
connection.ServiceClosed += Connection_ServiceClosed;

Conclusion
The new features added to the packaging project in Visual Studio 2017 will help you to modernize your existing desktop applications to get the best from UWP and Win32 in the same package. This new project will help you to configure your package by using the manifest designer, debug your application in the context of the Desktop Bridge and finally, help to create the packages for store submission or sideloading. Here are some resources for more details:
Desktop Bridge docs
Desktop Bridge samples
Windows Application Packaging project samples
App Modernization video on Channel 9
Are you ready to submit your desktop application to the Microsoft Store? Let us know about it here, and we will help you through the process!

Breaking on DOM Mutations in the Microsoft Edge DevTools

Editor’s note: This continues the series we began last week, highlighting what’s new and improved in the Microsoft Edge DevTools with EdgeHTML 16.
As the web platform evolves, the line between web and application developers continues to blur. It’s common now for a web site to be more like a web app, with complex, single-page user interfaces built up by a combination of libraries and custom JavaScript code. This in turn has led to a web platform that requires more sophisticated tools to efficiently debug.
As we rely more and more on JavaScript to build up the DOM, and rely on tools that interact with and abstract away from us the nuances of DOMs across browsers, we lose the ability to easily know what caused a change to an interface node, especially if that change is unexpected. In EdgeHTML 16 (available with the Windows 10 Fall Creators Update), we’ve introduced the ability to break on mutations caused by any of the 450+ DOM APIs in the EdgeHTML platform and jump directly to the script that triggered the change.
For those who use Chrome DevTools, this will be a familiar and welcome addition to Edge debugging. It was our goal to implement and advance on a similar experience to make jumping between the two tools as seamless as possible. Read on for the changes you can expect in the Fall Creators Update (and can preview now via Windows Insider builds).
Breakpoint types
There are three breakpoint types:
Subtree modifications: when a node is added or removed from the subtree of the element on which the breakpoint is set
Node removal: when the node the breakpoint is set on is removed from the DOM tree
Attribute modifications: when an attribute of the node on which the breakpoint is set is modified
Setting and managing breakpoints
To set a breakpoint, right-click on a node in the DOM tree in the Elements tool. Under the DOM breakpoints item, you’ll see options to set and unset the supported breakpoint types.
Add new breakpoints by right-clicking a node in the DOM tree and selecting “DOM breakpoints.”
When you add a breakpoint, a red breakpoint indicator appears next to the node in the DOM tree. The breakpoint is also listed in the DOM breakpoints pane which exists in both the Elements and Debugger tools. You can disable and delete breakpoints by using the mouse to click the checkbox and delete icons, respectively. You can also right-click, or use the keyboard, on a breakpoint to invoke a context menu to apply the same actions:
Disable or delete breakpoints in the new DOM Breakpoints pane.
Triggering a breakpoint
A breakpoint is triggered whenever one of over 450+ DOM APIs are called by JavaScript. When the breakpoint triggers, you’ll jump to the Debugger tool with the file containing the triggering script opened and the line with the API call highlighted.
When a DOM API triggers a breakpoint, the Debugger tool will open with the API call highlighted.
In the Debugger tab, you’ll notice at the top of the call stack is an entry with the selector for the node the breakpoint was triggered on, and the type of breakpoint triggered.

Breakpoint persistence
We store breakpoints as part of your Edge DevTools settings and scope them to the URL of the page they’re set within. When you close and re-open Edge DevTools, or refresh the page, we’ll restore and attempt to automatically rebind the breakpoints to their respective DOM nodes. If we’re unable to automatically rebind them, we’ll indicate that they’re unbound in the UI with a warning icon on the breakpoint circle.
Breakpoints that cannot be rebound when the session is restored will show an alert icon in the Breakpoints pane.
You can use the context menus or shortcut icons in the DOM breakpoints panes to manually rebind any breakpoints we were unable to automatically rebind.
What’s next for DOM Breakpoints
We’re excited to launch this feature and hope to solve for as many developer scenarios as we can, but want to highlight a few gaps in the current implementation:
We don’t currently support rebinding breakpoints inside iframes. If you set a breakpoint in an iframe and close Edge DevTools or refresh the page, the breakpoint will be lost.
If your script encounters a synchronously-executed breakpoint before the DOM readyState is completed, you won’t be able to set a DOM breakpoint while the debugger is paused. You can typically remedy this situation by setting the defer or async script attributes.
For synchronous scripts, we trigger automatic rebinding of breakpoints when the window.onload event is called. In this case, we may miss binding breakpoints that would trigger during initial script-driven build-up of the DOM. For asynchronous scripts, we trigger a rebind attempt before the first script executes, so your breakpoints may rebind and trigger as desired.
We’re evaluating closing these gaps in future releases, as we continue to evaluate the prevalence of these scenarios. If you have feedback and find these unsupported areas to be blockers, please let us know!
Tell us what you think
We hope you enjoy this new addition and find it improves your productivity as you go about your developer workflows. If you find any bugs, please report them via the Feedback Hub. If you have questions or feature requests, don’t hesitate to leave a comment here, or reach out to us on UserVoice or Twitter.
— ­Brendyn Alexander, Senior Program Manager, Microsoft Edge DevTools

Windows 10 SDK Preview Build 17046 now available

Today, we released a new Windows 10 Preview Build of the SDK to be used in conjunction with Windows 10 Insider Preview (Build 17046 or greater). The Preview SDK Build 17046 contains bug fixes and under development changes to the API surface area.
The Preview SDK can be downloaded from developer section on Windows Insider.
For feedback and updates to the known issues, please see the developer forum. For new developer feature requests, head over to our Windows Platform UserVoice.
Things to note:
This build works in conjunction with previously released SDKs and Visual Studio 2017. You can install this SDK and still also continue to submit your apps that target Windows 10 Creators build or earlier to the store.
The Windows SDK will now formally only be supported by Visual Studio 2017 and greater. You can download the Visual Studio 2017 here.
Known Issues
“All tests run with Windows App Certification Kit will fail. During installation, please uncheck Windows App Certification Kit”

Installation on an operating system that is not a Windows 10 Insider Preview build is not supported and may fail.
What’s New:
C++/WinRT Now Available:
The C++/WinRT headers and cppwinrt compiler (cppwinrt.exe) are now included in the Windows SDK. The compiler comes in handy if you need to consume a third-party WinRT component or if you need to author your own WinRT components with C++/WinRT. The easiest way to get working with it after installing the Windows Insider Preview SDK is to start the Visual Studio Developer Command Prompt and run the compiler in that environment. Authoring support is currently experimental and subject to change. Stay tuned as we will publish more detailed instructions on how to use the compiler in the coming week.The ModernCPP blog has a deeper dive into the CppWinRT compiler. Please give us feedback by creating an issue at: https://github.com/microsoft/cppwinrt.
Breaking Changes
New MIDL key words.
As a part of the “modernizing IDL” effort, several new keywords are added to the midlrt tool. These new keywords will cause build breaks if they are encountered in IDL files.
The new keywords are:
event
set
get
partial
unsealed
overridable
protected
importwinmd
If any of these keywords is used as an identifier, it will generate a build failure indicating a syntax error.
The error will be similar to:
1 >d:ossrconecorecomcombaseunittestastatestserverstestserver6idlremreleasetest.idl(12) : error MIDL2025 : [msg]syntax error [context]: expecting a declarator or * near “)”
To fix this, modify the identifier in error to an “@” prefix in front of the identifier. That will cause MIDL to treat the offending element as an identifier instead of a keyword.
API Updates and Additions
When targeting new APIs, consider writing your app to be adaptive in order to run correctly on the widest number of Windows 10 devices. Please see Dynamically detecting features with API contracts (10 by 10) for more information.
The following APIs have been added to the platform since the release of 16299.

namespace Windows.ApplicationModel {
public enum StartupTaskState {
EnabledByPolicy = 4,
}
}
namespace Windows.ApplicationModel.Background {
public sealed class MobileBroadbandPcoDataChangeTrigger : IBackgroundTrigger
public sealed class TetheringEntitlementCheckTrigger : IBackgroundTrigger
}
namespace Windows.ApplicationModel.Calls {
public enum PhoneCallMedia {
AudioAndRealTimeText = 2,
}
public sealed class VoipCallCoordinator {
VoipPhoneCall RequestNewAppInitiatedCall(string context, string contactName, string contactNumber, string serviceName, VoipPhoneCallMedia media);
VoipPhoneCall RequestNewIncomingCall(string context, string contactName, string contactNumber, Uri contactImage, string serviceName, Uri brandingImage, string callDetails, Uri ringtone, VoipPhoneCallMedia media, TimeSpan ringTimeout, string contactRemoteId);
}
public sealed class VoipPhoneCall {
void NotifyCallAccepted(VoipPhoneCallMedia media);
}
}
namespace Windows.ApplicationModel.Chat {
public sealed class RcsManagerChangedEventArgs
public enum RcsManagerChangeType
public sealed class RcsNotificationManager
}
namespace Windows.ApplicationModel.Store.Preview.InstallControl {
public sealed class AppInstallManager {
IAsyncOperation<IVectorView<AppInstallItem>> SearchForAllUpdatesAsync(string correlationVector, string clientId, AppUpdateOptions updateOptions);
IAsyncOperation<IVectorView<AppInstallItem>> SearchForAllUpdatesForUserAsync(User user, string correlationVector, string clientId, AppUpdateOptions updateOptions);
IAsyncOperation<AppInstallItem> SearchForUpdatesAsync(string productId, string skuId, string correlationVector, string clientId, AppUpdateOptions updateOptions);
IAsyncOperation<AppInstallItem> SearchForUpdatesForUserAsync(User user, string productId, string skuId, string correlationVector, string clientId, AppUpdateOptions updateOptions);
IAsyncOperation<IVectorView<AppInstallItem>> StartProductInstallAsync(string productId, string flightId, string clientId, string correlationVector, AppInstallOptions installOptions);
IAsyncOperation<IVectorView<AppInstallItem>> StartProductInstallForUserAsync(User user, string productId, string flightId, string clientId, string correlationVector, AppInstallOptions installOptions);
}
public sealed class AppInstallOptions
public sealed class AppInstallStatus {
bool IsStaged { get; }
}
public sealed class AppUpdateOptions
}
namespace Windows.ApplicationModel.UserActivities {
public sealed class UserActivity {
public UserActivity(string activityId);
}
public sealed class UserActivityChannel {
public static void DisableAutoSessionCreation();
}
public sealed class UserActivityVisualElements {
string AttributionDisplayText { get; set; }
}
}
namespace Windows.Devices.PointOfService {
public sealed class BarcodeScannerReport {
public BarcodeScannerReport(uint scanDataType, IBuffer scanData, IBuffer scanDataLabel);
}
public sealed class ClaimedBarcodeScanner : IClosable {
bool IsVideoPreviewShownOnEnable { get; set; }
void HideVideoPreview();
IAsyncOperation<bool> ShowVideoPreviewAsync();
}
public sealed class UnifiedPosErrorData {
public UnifiedPosErrorData(string message, UnifiedPosErrorSeverity severity, UnifiedPosErrorReason reason, uint extendedReason);
}
}
namespace Windows.Devices.PointOfService.Provider {
public sealed class BarcodeScannerDisableScannerRequest
public sealed class BarcodeScannerDisableScannerRequestEventArgs
public sealed class BarcodeScannerEnableScannerRequest
public sealed class BarcodeScannerEnableScannerRequestEventArgs
public sealed class BarcodeScannerGetSymbologyAttributesRequest
public sealed class BarcodeScannerGetSymbologyAttributesRequestEventArgs
public sealed class BarcodeScannerHideVideoPreviewRequest
public sealed class BarcodeScannerHideVideoPreviewRequestEventArgs
public sealed class BarcodeScannerProviderConnection : IClosable
public sealed class BarcodeScannerProviderTriggerDetails
public sealed class BarcodeScannerSetActiveSymbologiesRequest
public sealed class BarcodeScannerSetActiveSymbologiesRequestEventArgs
public sealed class BarcodeScannerSetSymbologyAttributesRequest
public sealed class BarcodeScannerSetSymbologyAttributesRequestEventArgs
public sealed class BarcodeScannerStartSoftwareTriggerRequest
public sealed class BarcodeScannerStartSoftwareTriggerRequestEventArgs
public sealed class BarcodeScannerStopSoftwareTriggerRequest
public sealed class BarcodeScannerStopSoftwareTriggerRequestEventArgs
public enum BarcodeScannerTriggerState
public sealed class BarcodeSymbologyAttributesBuilder
}
namespace Windows.Globalization {
public static class ApplicationLanguages {
public static IVectorView<string> GetLanguagesForUser(User user);
}
public sealed class Language {
LanguageLayoutDirection LayoutDirection { get; }
}
public enum LanguageLayoutDirection
}
namespace Windows.Graphics.Imaging {
public enum BitmapPixelFormat {
P010 = 104,
}
}
namespace Windows.Management.Deployment {
public sealed class PackageManager {
IAsyncOperationWithProgress<DeploymentResult, DeploymentProgress> RequestAddPackageAsync(Uri packageUri, IIterable<Uri> dependencyPackageUris, DeploymentOptions deploymentOptions, PackageVolume targetVolume, IIterable<string> optionalPackageFamilyNames, IIterable<Uri> relatedPackageUris, IIterable<Uri> packageUrisToInstall);
}
}
namespace Windows.Media.Audio {
public sealed class AudioGraph : IClosable {
IAsyncOperation<CreateMediaSourceAudioInputNodeResult> CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource);
IAsyncOperation<CreateMediaSourceAudioInputNodeResult> CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource, AudioNodeEmitter emitter);
}
public sealed class AudioGraphSettings {
double MaxPlaybackSpeedFactor { get; set; }
}
public sealed class AudioStateMonitor
public sealed class CreateMediaSourceAudioInputNodeResult
public sealed class MediaSourceAudioInputNode : IAudioInputNode, IAudioInputNode2, IAudioNode, IClosable
public enum MediaSourceAudioInputNodeCreationStatus
}
namespace Windows.Media.Capture {
public sealed class CapturedFrame : IClosable, IContentTypeProvider, IInputStream, IOutputStream, IRandomAccessStream, IRandomAccessStreamWithContentType {
BitmapPropertySet BitmapProperties { get; }
CapturedFrameControlValues ControlValues { get; }
}
public enum KnownVideoProfile {
HdrWithWcgPhoto = 8,
HdrWithWcgVideo = 7,
HighFrameRate = 5,
VariablePhotoSequence = 6,
VideoHdr8 = 9,
}
public sealed class MediaCaptureSettings {
IDirect3DDevice Direct3D11Device { get; }
}
public sealed class MediaCaptureVideoProfile {
IVectorView<MediaFrameSourceInfo> FrameSourceInfos { get; }
IMapView<Guid, object> Properties { get; }
}
public sealed class MediaCaptureVideoProfileMediaDescription {
IMapView<Guid, object> Properties { get; }
string Subtype { get; }
}
}
namespace Windows.Media.Capture.Frames {
public sealed class AudioMediaFrame
public sealed class MediaFrameFormat {
AudioEncodingProperties AudioEncodingProperties { get; }
}
public sealed class MediaFrameReference : IClosable {
AudioMediaFrame AudioMediaFrame { get; }
}
public sealed class MediaFrameSourceController {
AudioDeviceController AudioDeviceController { get; }
}
public sealed class MediaFrameSourceInfo {
string ProfileId { get; }
IVectorView<MediaCaptureVideoProfileMediaDescription> VideoProfileMediaDescription { get; }
}
public enum MediaFrameSourceKind {
Audio = 4,
Image = 5,
}
}
namespace Windows.Media.Core {
public sealed class MediaBindingEventArgs {
void SetDownloadOperation(DownloadOperation downloadOperation);
}
public sealed class MediaSource : IClosable, IMediaPlaybackSource {
DownloadOperation DownloadOperation { get; }
public static MediaSource CreateFromDownloadOperation(DownloadOperation downloadOperation);
}
}
namespace Windows.Media.Devices {
public sealed class VideoDeviceController : IMediaDeviceController {
VideoTemporalDenoisingControl VideoTemporalDenoisingControl { get; }
}
public sealed class VideoTemporalDenoisingControl
public enum VideoTemporalDenoisingMode
}
namespace Windows.Media.DialProtocol {
public sealed class DialReceiverApp {
IAsyncOperation<string> GetUniqueDeviceNameAsync();
}
}
namespace Windows.Media.MediaProperties {
public static class MediaEncodingSubtypes {
public static string P010 { get; }
}
public enum MediaPixelFormat {
P010 = 2,
}
}
namespace Windows.Media.Playback {
public sealed class MediaPlaybackSession {
MediaRotation PlaybackRotation { get; set; }
MediaPlaybackSessionOutputDegradationPolicyState GetOutputDegradationPolicyState();
}
public sealed class MediaPlaybackSessionOutputDegradationPolicyState
public enum MediaPlaybackSessionVideoConstrictionReason
}
namespace Windows.Media.Streaming.Adaptive {
public sealed class AdaptiveMediaSourceDiagnosticAvailableEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
public sealed class AdaptiveMediaSourceDownloadCompletedEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
public sealed class AdaptiveMediaSourceDownloadFailedEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
public sealed class AdaptiveMediaSourceDownloadRequestedEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
}
namespace Windows.Networking.BackgroundTransfer {
public sealed class DownloadOperation : IBackgroundTransferOperation, IBackgroundTransferOperationPriority {
void MakeCurrentInTransferGroup();
}
public sealed class UploadOperation : IBackgroundTransferOperation, IBackgroundTransferOperationPriority {
void MakeCurrentInTransferGroup();
}
}
namespace Windows.Networking.Connectivity {
public sealed class CellularApnContext {
string ProfileName { get; set; }
}
public sealed class ConnectionProfileFilter {
IReference<Guid> PurposeGuid { get; set; }
}
public sealed class WwanConnectionProfileDetails {
WwanNetworkIPKind IPKind { get; }
IVectorView<Guid> PurposeGuids { get; }
}
public enum WwanNetworkIPKind
}
namespace Windows.Networking.NetworkOperators {
public sealed class MobileBroadbandAntennaSar {
public MobileBroadbandAntennaSar(int antennaIndex, int sarBackoffIndex);
}
public sealed class MobileBroadbandModem {
IAsyncOperation<MobileBroadbandPco> TryGetPcoAsync();
}
public sealed class MobileBroadbandModemIsolation
public sealed class MobileBroadbandPco
public sealed class MobileBroadbandPcoDataChangeTriggerDetails
public sealed class TetheringEntitlementCheckTriggerDetails
}
namespace Windows.Networking.Sockets {
public sealed class ServerMessageWebSocket : IClosable
public sealed class ServerMessageWebSocketControl
public sealed class ServerMessageWebSocketInformation
public sealed class ServerStreamWebSocket : IClosable
public sealed class ServerStreamWebSocketInformation
}
namespace Windows.Networking.Vpn {
public sealed class VpnNativeProfile : IVpnProfile {
string IDi { get; set; }
VpnPayloadIdType IdiType { get; set; }
string IDr { get; set; }
VpnPayloadIdType IdrType { get; set; }
bool IsImsConfig { get; set; }
string PCscf { get; }
}
public enum VpnPayloadIdType
}
namespace Windows.Security.Authentication.Identity.Provider {
public enum SecondaryAuthenticationFactorAuthenticationMessage {
CanceledByUser = 22,
CenterHand = 23,
ConnectionRequired = 20,
DeviceUnavaliable = 28,
MoveHandCloser = 24,
MoveHandFarther = 25,
PlaceHandAbove = 26,
RecognitionFailed = 27,
TimeLimitExceeded = 21,
}
}
namespace Windows.Services.Maps {
public sealed class MapRouteDrivingOptions {
IReference<DateTime> DepartureTime { get; set; }
}
public sealed class PlaceInfo {
public static PlaceInfo CreateFromAddress(string displayAddress);
public static PlaceInfo CreateFromAddress(string displayAddress, string displayName);
}
}
namespace Windows.Services.Store {
public sealed class StoreCanAcquireLicenseResult
public enum StoreCanLicenseStatus
public sealed class StoreContext {
bool CanSilentlyDownloadStorePackageUpdates { get; }
IAsyncOperation<StoreCanAcquireLicenseResult> CanAcquireStoreLicenseForOptionalPackageAsync(Package optionalPackage);
IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> TrySilentDownloadAndInstallStorePackageUpdatesAsync(IIterable<StorePackageUpdate> storePackageUpdates);
IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> TrySilentDownloadStorePackageUpdatesAsync(IIterable<StorePackageUpdate> storePackageUpdates);
}
}
namespace Windows.Storage.Provider {
public interface IStorageProviderUriSource
public enum StorageProviderResolveContentUriResult
}
namespace Windows.System {
public sealed class AppActivationResult
public sealed class AppDiagnosticInfo {
IAsyncOperation<AppActivationResult> ActivateAsync();
}
public sealed class AppResourceGroupInfo {
IAsyncOperation<bool> TryResumeAsync();
IAsyncOperation<bool> TrySuspendAsync();
IAsyncOperation<bool> TryTerminateAsync();
}
public sealed class User {
public static User GetDefault();
}
public enum UserType {
SystemManaged = 4,
}
}
namespace Windows.System.Diagnostics {
public sealed class DiagnosticInvoker {
IAsyncOperationWithProgress<DiagnosticActionResult, DiagnosticActionState> RunDiagnosticActionFromStringAsync(string context);
}
}
namespace Windows.System.Diagnostics.DevicePortal {
public sealed class DevicePortalConnection {
ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request);
ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request, SocketMessageType messageType, string protocol);
ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request, SocketMessageType messageType, string protocol, uint outboundBufferSizeInBytes, uint maxMessageSize, MessageWebSocketReceiveMode receiveMode);
ServerStreamWebSocket GetServerStreamWebSocketForRequest(HttpRequestMessage request);
ServerStreamWebSocket GetServerStreamWebSocketForRequest(HttpRequestMessage request, string protocol, uint outboundBufferSizeInBytes, bool noDelay);
}
public sealed class DevicePortalConnectionRequestReceivedEventArgs {
bool IsWebSocketUpgradeRequest { get; }
IVectorView<string> WebSocketProtocolsRequested { get; }
Deferral GetDeferral();
}
}
namespace Windows.System.RemoteSystems {
public static class KnownRemoteSystemCapabilities {
public static string NearShare { get; }
}
}
namespace Windows.System.UserProfile {
public static class GlobalizationPreferences {
public static GlobalizationPreferencesForUser GetForUser(User user);
}
public sealed class GlobalizationPreferencesForUser
}
namespace Windows.UI.ApplicationSettings {
public sealed class AccountsSettingsPane {
public static IAsyncAction ShowAddAccountForUserAsync(User user);
public static IAsyncAction ShowManageAccountsForUserAsync(User user);
}
public sealed class AccountsSettingsPaneCommandsRequestedEventArgs {
User User { get; }
}
}
namespace Windows.UI.Composition {
public sealed class BounceScalarNaturalMotionAnimation : ScalarNaturalMotionAnimation
public sealed class BounceVector2NaturalMotionAnimation : Vector2NaturalMotionAnimation
public sealed class BounceVector3NaturalMotionAnimation : Vector3NaturalMotionAnimation
public class CompositionLight : CompositionObject {
bool IsEnabled { get; set; }
}
public sealed class Compositor : IClosable {
string Comment { get; set; }
BounceScalarNaturalMotionAnimation CreateBounceScalarAnimation();
BounceVector2NaturalMotionAnimation CreateBounceVector2Animation();
BounceVector3NaturalMotionAnimation CreateBounceVector3Animation();
}
public sealed class PointLight : CompositionLight {
Vector2 AttenuationCutoff { get; set; }
}
public sealed class SpotLight : CompositionLight {
Vector2 AttenuationCutoff { get; set; }
}
}
namespace Windows.UI.Composition.Core {
public sealed class CompositorController : IClosable
}
namespace Windows.UI.Composition.Desktop {
public sealed class HwndTarget : CompositionTarget
}
namespace Windows.UI.Input.Spatial {
public sealed class SpatialInteractionController {
BatteryReport TryGetBatteryReport();
}
}
namespace Windows.UI.Xaml {
public sealed class BringIntoViewOptions {
double HorizontalAlignmentRatio { get; set; }
double HorizontalOffset { get; set; }
double VerticalAlignmentRatio { get; set; }
double VerticalOffset { get; set; }
}
public sealed class BringIntoViewRequestedEventArgs : RoutedEventArgs
public sealed class EffectiveViewportChangedEventArgs
public enum FocusVisualKind {
Reveal = 2,
}
public class FrameworkElement : UIElement {
event TypedEventHandler<FrameworkElement, EffectiveViewportChangedEventArgs> EffectiveViewportChanged;
void InvalidateViewport();
virtual bool IsViewport();
}
public class UIElement : DependencyObject {
public static RoutedEvent BringIntoViewRequestedEvent { get; }
public static RoutedEvent ContextRequestedEvent { get; }
KeyboardAcceleratorPlacementMode KeyboardAcceleratorPlacementMode { get; set; }
public static DependencyProperty KeyboardAcceleratorPlacementModeProperty { get; }
DependencyObject KeyboardAcceleratorToolTipTarget { get; set; }
public static DependencyProperty KeyboardAcceleratorToolTipTargetProperty { get; }
DependencyObject KeyTipTarget { get; set; }
public static DependencyProperty KeyTipTargetProperty { get; }
event TypedEventHandler<UIElement, BringIntoViewRequestedEventArgs> BringIntoViewRequested;
virtual void OnBringIntoViewRequested(BringIntoViewRequestedEventArgs e);
virtual void OnKeyboardAcceleratorInvoked(KeyboardAcceleratorInvokedEventArgs args);
}
}
namespace Windows.UI.Xaml.Automation.Peers {
public sealed class AutoSuggestBoxAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider {
void Invoke();
}
public class CalendarDatePickerAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider, IValueProvider
}
namespace Windows.UI.Xaml.Controls {
public class AppBarButton : Button, ICommandBarElement, ICommandBarElement2 {
string KeyboardAcceleratorText { get; set; }
public static DependencyProperty KeyboardAcceleratorTextProperty { get; }
AppBarButtonTemplateSettings TemplateSettings { get; }
}
public class AppBarToggleButton : ToggleButton, ICommandBarElement, ICommandBarElement2 {
string KeyboardAcceleratorText { get; set; }
public static DependencyProperty KeyboardAcceleratorTextProperty { get; }
AppBarToggleButtonTemplateSettings TemplateSettings { get; }
}
public class MenuFlyoutItem : MenuFlyoutItemBase {
string KeyboardAcceleratorText { get; set; }
public static DependencyProperty KeyboardAcceleratorTextProperty { get; }
MenuFlyoutItemTemplateSettings TemplateSettings { get; }
}
public class NavigationView : ContentControl {
string PaneTitle { get; set; }
public static DependencyProperty PaneTitleProperty { get; }
event TypedEventHandler<NavigationView, object> PaneClosed;
event TypedEventHandler<NavigationView, NavigationViewPaneClosingEventArgs> PaneClosing;
event TypedEventHandler<NavigationView, object> PaneOpened;
event TypedEventHandler<NavigationView, object> PaneOpening;
}
public sealed class NavigationViewPaneClosingEventArgs
public sealed class ScrollViewer : ContentControl {
bool IsResponsiveToOcclusions { get; set; }
public static DependencyProperty IsResponsiveToOcclusionsProperty { get; }
}
public enum WebViewPermissionType {
Screen = 5,
}
}
namespace Windows.UI.Xaml.Controls.Maps {
public sealed class MapControl : Control {
string Region { get; set; }
public static DependencyProperty RegionProperty { get; }
}
public class MapElement : DependencyObject {
bool IsEnabled { get; set; }
public static DependencyProperty IsEnabledProperty { get; }
}
}
namespace Windows.UI.Xaml.Controls.Primitives {
public sealed class AppBarButtonTemplateSettings : DependencyObject
public sealed class AppBarToggleButtonTemplateSettings : DependencyObject
public class ListViewItemPresenter : ContentPresenter {
bool DisableTilt { get; set; }
public static DependencyProperty DisableTiltProperty { get; }
}
public sealed class MenuFlyoutItemTemplateSettings : DependencyObject
}
namespace Windows.UI.Xaml.Input {
public sealed class GettingFocusEventArgs : RoutedEventArgs {
bool TryCancel();
bool TrySetNewFocusedElement(DependencyObject element);
}
public sealed class KeyboardAcceleratorInvokedEventArgs {
KeyboardAccelerator KeyboardAccelerator { get; }
}
public enum KeyboardAcceleratorPlacementMode
public sealed class LosingFocusEventArgs : RoutedEventArgs {
bool TryCancel();
bool TrySetNewFocusedElement(DependencyObject element);
}
}

New and improved Event and CSS inspection for Microsoft Edge DevTools

Editor’s note: This is the first post in a series highlighting what’s new and improved in the Microsoft Edge DevTools with EdgeHTML 16.
EdgeHTML 16 is now rolling out to devices around the world as part of the Windows 10 Fall Creator’s Update—and with it, some great improvements to the Microsoft Edge DevTools.
In this post, we’ll walk through a slew of new updates to the Elements tab (formerly known as the DOM Explorer) with improvements to CSS at-rules, Event Listeners, Pseudo-Elements and the overall user experience.
CSS at-rules
In EdgeHTML 16, we’ve completely redesigned how at-rules appear in the Elements tab. Previously, usage of CSS at-rules were either missing or incorrectly displayed. The DevTools now show @supports, @media and @keyframes styles in separate sections within the Styles pane:

The new at-rules interface inspecting @keyframes on the CodePen example above
We also added a new pane for inspecting the rendered font of an element. In the Fonts pane, you can now see whether a font is served from the local machine or over the network and what, if any, fallback font face was used. If over the network, the DevTools will show the correlating @font-face rule:

You can now inspect the rendered font of an element in the Fonts pane.
Ancestor Event Listeners
The DevTools now allow you to inspect all event listeners on ancestor elements up to the current Window with the Ancestors option. You can also group event listeners by Element to see how the events will fire at each level of the element tree. This enables you to determine where a rogue event listener might be firing higher up the tree.

You can now inspect all event listeners on ancestor elements up to the current Window with the Acnestors option.
Ancestor Event Listeners can be grouped by Element or Event.
Pseudo-Elements
In the Styles pane, the DevTools now group styles by their respective pseudo-element, supporting ::before, ::after, ::first-letter, ::first-line and ::selection. This should make it easier to determine which style is winning the cascade.

Styles are now grouped by their respective psuedo-element.
User Experience
This release also includes some tweaks to the user experience of the DevTools to make it easier for developers who work in multiple browsers.
In particular, Layout pane has been removed and the box model is now at the top of the Computed pane, freeing up space for two new panes: Fonts and DOM breakpoints.

The box model is now at the top of the Computed pane.
Finally, to make it easier on developers who switch between multiple browsers, we’ve added two new ways to launch the DevTools: Ctrl+Shift+I and Ctrl+Shift+J. Ctrl+Shift+I will launch the DevTools just as the F12 keybinding does today. Ctrl+Shift+J will launch the DevTools (if not already open) and take you directly to the Console.
You can try out and file feedback for these new features starting with EdgeHTML 16, and find us on Twitter @EdgeDevTools to let us know what you think!
— Clay Martin, Program Manager, Microsoft Edge DevTools

The UWP Community Toolkit v2.1

We are extremely excited to announce the latest update to the UWP Community Toolkit, version 2.1!
This update builds on top of the previous version and continues to align the toolkit closer to the Windows 10 Fall Creators Update SDK. Thanks to the continued support and help of the community, all packages have been updated to target the Fall Creators Update, several controls, helpers, and extensions have been added or updated, and the documentation and design time experience have been greatly improved.
Below is a quick list of few of the major updates in this release. Head over to the release notes for a complete overview of what’s new in 2.1.
DockPanel
This release introduces the DockPanel control that provides an easy docking of elements to the left, right, top, bottom or center.

#DockPanel is now part of #UwpToolkit get the pre-release from here https://t.co/ccEz8R6qSa thanks to @metulev & @dotMorten for their review pic.twitter.com/Gfp566kFAE
— Ibraheem Osama (@IbraheemOM) November 2, 2017

HeaderedContentControl and HeaderedItemsControl
There are now two controls, HeaderedContentControl and HeaderedItemsControl that allow content to be easily displayed with a header that can be templated.

&lt;controls:HeaderedContentControl Header=&quot;Hello header!&quot;&gt;
&lt;Grid Background=&quot;Gray&quot;&gt;

&lt;/Grid&gt;
&lt;/&lt;controls:HeaderedContentControl&gt;

Connected and Implicit Animation in XAML
There are two new sets of XAML attached properties that enable working with composition animations directly in XAML
Implicit animations (including show and hide) can now be directly added to the elements in XAML

&lt;Border extensions:VisualExtensions.NormalizedCenterPoint=&quot;0.5&quot;&gt;

&lt;animations:Implicit.ShowAnimations&gt;
&lt;animations:TranslationAnimation Duration=&quot;0:0:1&quot;
To=&quot;0, 100, 0&quot; &gt;&lt;/animations:TranslationAnimation&gt;
&lt;animations:OpacityAnimation Duration=&quot;0:0:1&quot;
To=&quot;1.0&quot;&gt;&lt;/animations:OpacityAnimation&gt;
&lt;/animations:Implicit.ShowAnimations&gt;

&lt;/Border&gt;

Connected animations can now be defined directly on the element in XAML by simply adding the same key on elements on different pages

&lt;!– Page 1 –&gt;
&lt;Border x:Name=&quot;Element&quot; animations:Connected.Key=&quot;item&quot;&gt;&lt;/Border&gt;

&lt;!– Page 2 –&gt;
&lt;Border x:Name=&quot;Element&quot; animations:Connected.Key=&quot;item&quot;&gt;&lt;/Border&gt;

Improved design time experience
Added designer support for controls, including toolbox integration and improved design time experience by placing properties in the proper category in the properties grid with hover tooltip.

Added @VisualStudio Toolbox integration to #UWPToolkit: https://t.co/SZ6Tf3b0cf #DragNDropLikeItsHot pic.twitter.com/G4s73wXUsi
— Morten Nielsen (@dotMorten) August 31, 2017

New SystemInformation properties
SystemInformation class now includes new properties and methods to make it easier to provide first run (or related) experiences or collect richer analytics.

The #uwptoolkit got some new SystemInformation properties fresh from the oven thanks to @mrlacey. What would you use these for? https://t.co/cFjGWSBxPX pic.twitter.com/Pft6nWbx0M
— Nikola Metulev (@metulev) October 13, 2017

Easy transition to new Fall Creators Update controls
To enable a smooth transition from existing toolkit controls to the new Fall Creators Update controls, the HamburgeMenu and SlidableListItem have new properties to use the NavigationView and SwipeControl respectively when running on Fall Creators Update. Take a look at the documentation on how this works.
Documentation
All documentation is now available at Microsoft docs. In addition, there is new API documentation as part of .NET API Browser.
Built by the Community
This update would not have been possible if it wasn’t for the community support and participation. If you are interested in participating in the development, but don’t know how to get started, check out our “help wanted” issues on GitHub.
As a reminder, although most of the development efforts and usage of the UWP Community Toolkit is for Desktop apps, it also works great on Xbox One, Mobile, HoloLens, IoT and Surface Hub devices. You can get started by following this tutorial, or preview the latest features by installing the UWP Community Toolkit Sample App from the Microsoft Store.
To join the conversation on Twitter, use the #uwptoolkit hashtag.

Windows 10 SDK Preview Build 17040 now available

Today, we released a new Windows 10 Preview Build of the SDK to be used in conjunction with Windows 10 Insider Preview (Build 17040 or greater). The Preview SDK Build 17040 contains bug fixes and under development changes to the API surface area.
The Preview SDK can be downloaded from developer section on Windows Insider.
For feedback and updates to the known issues, please see the developer forum. For new developer feature requests, head over to our Windows Platform UserVoice.
Things to note:
This build works in conjunction with previously released SDKs and Visual Studio 2017. You can install this SDK and still also continue to submit your apps that target Windows 10 Creators build or earlier to the store.
The Windows SDK will now formally only be supported by Visual Studio 2017 and greater. You can download the Visual Studio 2017 here.
Known Issues
“All tests run with Windows App Certification Kit will fail.  During installation, please uncheck Windows App Certification Kit”

Installation on an operating system that is not a Windows 10 Insider Preview  build is not supported and may fail.
What’s New:
C++/WinRT Now Available:
The C++/WinRT headers and cppwinrt compiler (cppwinrt.exe) are now included in the Windows SDK. The compiler comes in handy if you need to consume a third-party WinRT component or if you need to author your own WinRT components with C++/WinRT. The easiest way to get working with it after installing the Windows Insider Preview SDK is to start the Visual Studio Developer Command Prompt and run the compiler in that environment. Authoring support is currently experimental and subject to change. Stay tuned as we will publish more detailed instructions on how to use the compiler in the coming week.The ModernCPP blog has a deeper dive into the CppWinRT compiler. Please give us feedback by creating an issue at: https://github.com/microsoft/cppwinrt.
Breaking Changes
New MIDL key words. 
As a part of the “modernizing IDL” effort, several new keywords are added to the midlrt tool. These new keywords will cause build breaks if they are encountered in IDL files.
The new keywords are:
event
set
get
partial
unsealed
overridable
protected
importwinmd
If any of these keywords is used as an identifier, it will generate a build failure indicating a syntax error.
The error will be similar to:
1 >d:ossrconecorecomcombaseunittestastatestserverstestserver6idlremreleasetest.idl(12) : error MIDL2025 : [msg]syntax error [context]: expecting a declarator or * near “)”
To fix this, modify the identifier in error to an “@” prefix in front of the identifier. That will cause MIDL to treat the offending element as an identifier instead of a keyword.
API Updates and Additions
When targeting new APIs, consider writing your app to be adaptive in order to run correctly on the widest number of Windows 10 devices. Please see Dynamically detecting features with API contracts (10 by 10) for more information.
The following APIs have been added to the platform since the release of 16299.

namespace Windows.ApplicationModel {
public enum StartupTaskState {
EnabledByPolicy = 4,
}
}
namespace Windows.ApplicationModel.Background {
public sealed class MobileBroadbandPcoDataChangeTrigger : IBackgroundTrigger
public sealed class TetheringEntitlementCheckTrigger : IBackgroundTrigger
}
namespace Windows.ApplicationModel.Calls {
public enum PhoneCallMedia {
AudioAndRealTimeText = 2,
}
public sealed class VoipCallCoordinator {
VoipPhoneCall RequestNewAppInitiatedCall(string context, string contactName, string contactNumber, string serviceName, VoipPhoneCallMedia media);
VoipPhoneCall RequestNewIncomingCall(string context, string contactName, string contactNumber, Uri contactImage, string serviceName, Uri brandingImage, string callDetails, Uri ringtone, VoipPhoneCallMedia media, TimeSpan ringTimeout, string contactRemoteId);
}
public sealed class VoipPhoneCall {
void NotifyCallAccepted(VoipPhoneCallMedia media);
}
}
namespace Windows.ApplicationModel.Chat {
public sealed class RcsManagerChangedEventArgs
public enum RcsManagerChangeType
public sealed class RcsNotificationManager
}
namespace Windows.ApplicationModel.UserActivities {
public sealed class UserActivity {
public UserActivity(string activityId);
}
public sealed class UserActivityChannel {
public static void DisableAutoSessionCreation();
}
public sealed class UserActivityVisualElements {
string AttributionDisplayText { get; set; }
}
}
namespace Windows.Devices.PointOfService {
public sealed class BarcodeScannerReport {
public BarcodeScannerReport(uint scanDataType, IBuffer scanData, IBuffer scanDataLabel);
}
public sealed class ClaimedBarcodeScanner : IClosable {
bool IsVideoPreviewShownOnEnable { get; set; }
void HideVideoPreview();
IAsyncOperation<bool> ShowVideoPreviewAsync();
}
public sealed class UnifiedPosErrorData {
public UnifiedPosErrorData(string message, UnifiedPosErrorSeverity severity, UnifiedPosErrorReason reason, uint extendedReason);
}
}
namespace Windows.Globalization {
public static class ApplicationLanguages {
public static IVectorView<string> GetLanguagesForUser(User user);
}
public sealed class Language {
LanguageLayoutDirection LayoutDirection { get; }
}
public enum LanguageLayoutDirection
}
namespace Windows.Graphics.Imaging {
public enum BitmapPixelFormat {
P010 = 104,
}
}
namespace Windows.Management.Deployment {
public sealed class PackageManager {
IAsyncOperationWithProgress<DeploymentResult, DeploymentProgress> RequestAddPackageAsync(Uri packageUri, IIterable<Uri> dependencyPackageUris, DeploymentOptions deploymentOptions, PackageVolume targetVolume, IIterable<string> optionalPackageFamilyNames, IIterable<Uri> relatedPackageUris, IIterable<Uri> packageUrisToInstall);
}
}
namespace Windows.Media.Audio {
public sealed class AudioGraph : IClosable {
IAsyncOperation<CreateMediaSourceAudioInputNodeResult> CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource);
IAsyncOperation<CreateMediaSourceAudioInputNodeResult> CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource, AudioNodeEmitter emitter);
}
public sealed class AudioGraphSettings {
double MaxPlaybackSpeedFactor { get; set; }
}
public sealed class AudioStateMonitor
public sealed class CreateMediaSourceAudioInputNodeResult
public sealed class MediaSourceAudioInputNode : IAudioInputNode, IAudioInputNode2, IAudioNode, IClosable
public enum MediaSourceAudioInputNodeCreationStatus
}
namespace Windows.Media.Capture {
public sealed class CapturedFrame : IClosable, IContentTypeProvider, IInputStream, IOutputStream, IRandomAccessStream, IRandomAccessStreamWithContentType {
BitmapPropertySet BitmapProperties { get; }
CapturedFrameControlValues ControlValues { get; }
}
public enum KnownVideoProfile {
HdrWithWcgPhoto = 8,
HdrWithWcgVideo = 7,
HighFrameRate = 5,
VariablePhotoSequence = 6,
VideoHdr8 = 9,
}
public sealed class MediaCaptureSettings {
IDirect3DDevice Direct3D11Device { get; }
}
public sealed class MediaCaptureVideoProfile {
IVectorView<MediaFrameSourceInfo> FrameSourceInfos { get; }
IMapView<Guid, object> Properties { get; }
}
public sealed class MediaCaptureVideoProfileMediaDescription {
IMapView<Guid, object> Properties { get; }
string Subtype { get; }
}
}
namespace Windows.Media.Capture.Frames {
public sealed class AudioMediaFrame
public sealed class MediaFrameFormat {
AudioEncodingProperties AudioEncodingProperties { get; }
}
public sealed class MediaFrameReference : IClosable {
AudioMediaFrame AudioMediaFrame { get; }
}
public sealed class MediaFrameSourceController {
AudioDeviceController AudioDeviceController { get; }
}
public sealed class MediaFrameSourceInfo {
string ProfileId { get; }
IVectorView<MediaCaptureVideoProfileMediaDescription> VideoProfileMediaDescription { get; }
}
public enum MediaFrameSourceKind {
Audio = 4,
Image = 5,
}
}
namespace Windows.Media.Core {
public sealed class MediaBindingEventArgs {
void SetDownloadOperation(DownloadOperation downloadOperation);
}
public sealed class MediaSource : IClosable, IMediaPlaybackSource {
DownloadOperation DownloadOperation { get; }
public static MediaSource CreateFromDownloadOperation(DownloadOperation downloadOperation);
}
}
namespace Windows.Media.Devices {
public sealed class VideoDeviceController : IMediaDeviceController {
VideoTemporalDenoisingControl VideoTemporalDenoisingControl { get; }
}
public sealed class VideoTemporalDenoisingControl
public enum VideoTemporalDenoisingMode
}
namespace Windows.Media.DialProtocol {
public sealed class DialReceiverApp {
IAsyncOperation<string> GetUniqueDeviceNameAsync();
}
}
namespace Windows.Media.MediaProperties {
public static class MediaEncodingSubtypes {
public static string P010 { get; }
}
public enum MediaPixelFormat {
P010 = 2,
}
}
namespace Windows.Media.Playback {
public sealed class MediaPlaybackSession {
MediaRotation PlaybackRotation { get; set; }
MediaPlaybackSessionOutputDegradationPolicyState GetOutputDegradationPolicyState();
}
public sealed class MediaPlaybackSessionOutputDegradationPolicyState
public enum MediaPlaybackSessionVideoConstrictionReason
}
namespace Windows.Media.Streaming.Adaptive {
public sealed class AdaptiveMediaSourceDiagnosticAvailableEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
public sealed class AdaptiveMediaSourceDownloadCompletedEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
public sealed class AdaptiveMediaSourceDownloadFailedEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
public sealed class AdaptiveMediaSourceDownloadRequestedEventArgs {
string ResourceContentType { get; }
IReference<TimeSpan> ResourceDuration { get; }
}
}
namespace Windows.Networking.BackgroundTransfer {
public sealed class DownloadOperation : IBackgroundTransferOperation, IBackgroundTransferOperationPriority {
void MakeCurrentInTransferGroup();
}
public sealed class UploadOperation : IBackgroundTransferOperation, IBackgroundTransferOperationPriority {
void MakeCurrentInTransferGroup();
}
}
namespace Windows.Networking.Connectivity {
public sealed class CellularApnContext {
string ProfileName { get; set; }
}
public sealed class ConnectionProfileFilter {
IReference<Guid> PurposeGuid { get; set; }
}
public sealed class WwanConnectionProfileDetails {
WwanNetworkIPKind IPKind { get; }
IVectorView<Guid> PurposeGuids { get; }
}
public enum WwanNetworkIPKind
}
namespace Windows.Networking.NetworkOperators {
public sealed class MobileBroadbandAntennaSar {
public MobileBroadbandAntennaSar(int antennaIndex, int sarBackoffIndex);
}
public sealed class MobileBroadbandModem {
IAsyncOperation<MobileBroadbandPco> TryGetPcoAsync();
}
public sealed class MobileBroadbandModemIsolation
public sealed class MobileBroadbandPco
public sealed class MobileBroadbandPcoDataChangeTriggerDetails
public sealed class TetheringEntitlementCheckTriggerDetails
}
namespace Windows.Networking.Sockets {
public sealed class ServerMessageWebSocket : IClosable
public sealed class ServerMessageWebSocketControl
public sealed class ServerMessageWebSocketInformation
public sealed class ServerStreamWebSocket : IClosable
public sealed class ServerStreamWebSocketInformation
}
namespace Windows.Networking.Vpn {
public sealed class VpnNativeProfile : IVpnProfile {
string IDi { get; set; }
VpnPayloadIdType IdiType { get; set; }
string IDr { get; set; }
VpnPayloadIdType IdrType { get; set; }
bool IsImsConfig { get; set; }
string PCscf { get; }
}
public enum VpnPayloadIdType
}
namespace Windows.Security.Authentication.Identity.Provider {
public enum SecondaryAuthenticationFactorAuthenticationMessage {
CanceledByUser = 22,
CenterHand = 23,
ConnectionRequired = 20,
DeviceUnavaliable = 28,
MoveHandCloser = 24,
MoveHandFarther = 25,
PlaceHandAbove = 26,
RecognitionFailed = 27,
TimeLimitExceeded = 21,
}
}
namespace Windows.Services.Maps {
public sealed class MapRouteDrivingOptions {
IReference<DateTime> DepartureTime { get; set; }
}
}
namespace Windows.System {
public sealed class AppActivationResult
public sealed class AppDiagnosticInfo {
IAsyncOperation<AppActivationResult> ActivateAsync();
}
public sealed class AppResourceGroupInfo {
IAsyncOperation<bool> TryResumeAsync();
IAsyncOperation<bool> TrySuspendAsync();
IAsyncOperation<bool> TryTerminateAsync();
}
public sealed class User {
public static User GetDefault();
}
public enum UserType {
SystemManaged = 4,
}
}
namespace Windows.System.Diagnostics {
public sealed class DiagnosticInvoker {
IAsyncOperationWithProgress<DiagnosticActionResult, DiagnosticActionState> RunDiagnosticActionFromStringAsync(string context);
}
}
namespace Windows.System.Diagnostics.DevicePortal {
public sealed class DevicePortalConnection {
ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request);
ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request, SocketMessageType messageType, string protocol);
ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request, SocketMessageType messageType, string protocol, uint outboundBufferSizeInBytes, uint maxMessageSize, MessageWebSocketReceiveMode receiveMode);
ServerStreamWebSocket GetServerStreamWebSocketForRequest(HttpRequestMessage request);
ServerStreamWebSocket GetServerStreamWebSocketForRequest(HttpRequestMessage request, string protocol, uint outboundBufferSizeInBytes, bool noDelay);
}
public sealed class DevicePortalConnectionRequestReceivedEventArgs {
bool IsWebSocketUpgradeRequest { get; }
IVectorView<string> WebSocketProtocolsRequested { get; }
Deferral GetDeferral();
}
}
namespace Windows.System.RemoteSystems {
public static class KnownRemoteSystemCapabilities {
public static string NearShare { get; }
}
}
namespace Windows.System.UserProfile {
public static class GlobalizationPreferences {
public static GlobalizationPreferencesForUser GetForUser(User user);
}
public sealed class GlobalizationPreferencesForUser
}
namespace Windows.UI.ApplicationSettings {
public sealed class AccountsSettingsPane {
public static IAsyncAction ShowAddAccountForUserAsync(User user);
public static IAsyncAction ShowManageAccountsForUserAsync(User user);
}
public sealed class AccountsSettingsPaneCommandsRequestedEventArgs {
User User { get; }
}
}
namespace Windows.UI.Composition {
public sealed class BounceScalarNaturalMotionAnimation : ScalarNaturalMotionAnimation
public sealed class BounceVector2NaturalMotionAnimation : Vector2NaturalMotionAnimation
public sealed class BounceVector3NaturalMotionAnimation : Vector3NaturalMotionAnimation
public class CompositionLight : CompositionObject {
bool IsEnabled { get; set; }
}
public sealed class Compositor : IClosable {
string Comment { get; set; }
BounceScalarNaturalMotionAnimation CreateBounceScalarAnimation();
BounceVector2NaturalMotionAnimation CreateBounceVector2Animation();
BounceVector3NaturalMotionAnimation CreateBounceVector3Animation();
}
public sealed class PointLight : CompositionLight {
Vector2 AttenuationCutoff { get; set; }
}
public sealed class SpotLight : CompositionLight {
Vector2 AttenuationCutoff { get; set; }
}
}
namespace Windows.UI.Composition.Core {
public sealed class CompositorController : IClosable
}
namespace Windows.UI.Composition.Desktop {
public sealed class HwndTarget : CompositionTarget
}
namespace Windows.UI.Xaml {
public sealed class BringIntoViewOptions {
double HorizontalAlignmentRatio { get; set; }
double HorizontalOffset { get; set; }
double VerticalAlignmentRatio { get; set; }
double VerticalOffset { get; set; }
}
public sealed class BringIntoViewRequestedEventArgs : RoutedEventArgs
public sealed class EffectiveViewportChangedEventArgs
public enum FocusVisualKind {
Reveal = 2,
}
public class FrameworkElement : UIElement {
event TypedEventHandler<FrameworkElement, EffectiveViewportChangedEventArgs> EffectiveViewportChanged;
void InvalidateViewport();
virtual bool IsViewport();
}
public class UIElement : DependencyObject {
public static RoutedEvent BringIntoViewRequestedEvent { get; }
public static RoutedEvent ContextRequestedEvent { get; }
KeyboardAcceleratorPlacementMode KeyboardAcceleratorPlacementMode { get; set; }
public static DependencyProperty KeyboardAcceleratorPlacementModeProperty { get; }
DependencyObject KeyboardAcceleratorToolTipTarget { get; set; }
public static DependencyProperty KeyboardAcceleratorToolTipTargetProperty { get; }
DependencyObject KeyTipTarget { get; set; }
public static DependencyProperty KeyTipTargetProperty { get; }
event TypedEventHandler<UIElement, BringIntoViewRequestedEventArgs> BringIntoViewRequested;
virtual void OnBringIntoViewRequested(BringIntoViewRequestedEventArgs e);
virtual void OnKeyboardAcceleratorInvoked(KeyboardAcceleratorInvokedEventArgs args);
}
}
namespace Windows.UI.Xaml.Automation.Peers {
public sealed class AutoSuggestBoxAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider {
void Invoke();
}
public class CalendarDatePickerAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider, IValueProvider
}
namespace Windows.UI.Xaml.Controls {
public class AppBarButton : Button, ICommandBarElement, ICommandBarElement2 {
string KeyboardAcceleratorText { get; set; }
public static DependencyProperty KeyboardAcceleratorTextProperty { get; }
AppBarButtonTemplateSettings TemplateSettings { get; }
}
public class AppBarToggleButton : ToggleButton, ICommandBarElement, ICommandBarElement2 {
string KeyboardAcceleratorText { get; set; }
public static DependencyProperty KeyboardAcceleratorTextProperty { get; }
AppBarToggleButtonTemplateSettings TemplateSettings { get; }
}
public class MenuFlyoutItem : MenuFlyoutItemBase {
string KeyboardAcceleratorText { get; set; }
public static DependencyProperty KeyboardAcceleratorTextProperty { get; }
MenuFlyoutItemTemplateSettings TemplateSettings { get; }
}
public class NavigationView : ContentControl {
string PaneTitle { get; set; }
public static DependencyProperty PaneTitleProperty { get; }
event TypedEventHandler<NavigationView, object> PaneClosed;
event TypedEventHandler<NavigationView, NavigationViewPaneClosingEventArgs> PaneClosing;
event TypedEventHandler<NavigationView, object> PaneOpened;
event TypedEventHandler<NavigationView, object> PaneOpening;
}
public sealed class NavigationViewPaneClosingEventArgs
public sealed class ScrollViewer : ContentControl {
bool IsResponsiveToOcclusions { get; set; }
public static DependencyProperty IsResponsiveToOcclusionsProperty { get; }
}
public enum WebViewPermissionType {
Screen = 5,
}
}
namespace Windows.UI.Xaml.Controls.Maps {
public sealed class MapControl : Control {
string Region { get; set; }
public static DependencyProperty RegionProperty { get; }
}
public class MapElement : DependencyObject {
bool IsEnabled { get; set; }
public static DependencyProperty IsEnabledProperty { get; }
}
}
namespace Windows.UI.Xaml.Controls.Primitives {
public sealed class AppBarButtonTemplateSettings : DependencyObject
public sealed class AppBarToggleButtonTemplateSettings : DependencyObject
public class ListViewItemPresenter : ContentPresenter {
bool DisableTilt { get; set; }
public static DependencyProperty DisableTiltProperty { get; }
}
public sealed class MenuFlyoutItemTemplateSettings : DependencyObject
}
namespace Windows.UI.Xaml.Input {
public sealed class GettingFocusEventArgs : RoutedEventArgs {
bool TryCancel();
bool TrySetNewFocusedElement(DependencyObject element);
}
public sealed class KeyboardAcceleratorInvokedEventArgs {
KeyboardAccelerator KeyboardAccelerator { get; }
}
public enum KeyboardAcceleratorPlacementMode
public sealed class LosingFocusEventArgs : RoutedEventArgs {
bool TryCancel();
bool TrySetNewFocusedElement(DependencyObject element);
}
}

Windows Community Standup on November 29th, 2017

Kevin Gallo is hosting the next Windows Community Standup on November 29th, 2017 at 10:00am PST on Channel 9 with Seth Juarez!
Kevin will be answering questions we didn’t get to from the Windows Developer Day on October 10th. While we’re going through the list, we will be taking live questions too.
Windows community standup is a monthly online broadcast where we provide additional transparency on what we are building out, and why we are excited. As always, we welcome your feedback on what could be done better.
Once again, we can’t wait to see you at 10:00am PST on  November 29th, 2017 over at https://channel9.msdn.com.