With Windows 8.1 appeared multitasking APIs allowing developers to use the Snap capabilities of Windows 8.0, expanded with Windows 8.1.
Since then, apps like Mail can open an embedded link by opening a second window. This multi windowing capability even made Apple jealous, and it is
rumored to be available in iOS 9.
Developers can also open a second window of the same app! This is really interesting as it allows, for example, to open a mail in a second window while having a primary window with all your unread mails.
Apart from Microsoft apps, only a few apps are making use of those useful APIs, which is sad but understandable as the multi-windowing feature was designed primarily for tablets, which are definitely not selling like hotcakes.
With Windows 10, Microsoft introduced Tablet Mode (which I like to call Immersive Mode) and apps are in Fullscreen mode only when this mode is enabled. Otherwise, apps will launch in windows, just like it’s been the case before I was even born. Windows is about windows again, rejoice!
Getting started: how to use multiple windows
Interestingly, the APIs are the same whether you’re targetting Windows 8.1 or 10. The new version of Windows brings some new features, such as resizing your window.
Here’s the code.
public static async Task CreateNewWindow()
var newCoreAppView = CoreApplication.CreateNewView();
var appView = ApplicationView.GetForCurrentView();
await newCoreAppView.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, async () =>
var window = Window.Current;
var newAppView = ApplicationView.GetForCurrentView();
newAppView.SetPreferredMinSize(new Windows.Foundation.Size(400, 300));
var frame = new Frame();
window.Content = frame;
await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newAppView.Id, ViewSizePreference.UseMore, appView.Id, ViewSizePreference.Default);
var success = newAppView.TryResizeView(new Windows.Foundation.Size(400, 400));
First, you need to create a new CoreApplication view, so you have a new Dispatcher (new UI Thread) for that new view. Then, get the instance of the current window in that new view, set its Content (a Frame which navigates here to MainPage), and finally activate and show it by sending its Id to
As you can see in the code, I take the benefits of some new Windows 10 APIs:
- SetPreferredMinSize : Allows you to set the default minimum size of a window. If your secondary window is a widget, or a mini-player, this method is for you.
- TryResizeView : Your UX scenario implies resizing the window for any reasons? Go for it.
Of course, using reflection you can use those in a W8.1 app running on a W10 machine.
It also works on Windows 10 Mobile!
As usual, the samples are available here: https://github.com/ThomasNigro/Sample3-MultiWindowing
Please note: I’m thinking of having just one repo with all the code samples inside, rather than having one repo per blogpost. Any opinion?