UWPで複数ウィンドウの出し方です。 基本的には、CoreApplicationのCreateNewViewで新しいCoreApplicationViewを作って、そいつのDispatcher上で新しいWindowを表示してやるようなイメージです。コードでいうとこんな感じ。
private async void button_Click(object sender, RoutedEventArgs e) { var currentViewId = ApplicationView.GetForCurrentView().Id; await CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { Window.Current.Content = new Frame(); ((Frame)Window.Current.Content).Navigate(typeof(NewWindowPage)); Window.Current.Activate(); await ApplicationViewSwitcher.TryShowAsStandaloneAsync( ApplicationView.GetApplicationViewIdForWindow(Window.Current.CoreWindow), ViewSizePreference.Default, currentViewId, ViewSizePreference.Default); }); }
複数ウィンドウを出したときに気を付けないといけないのは、それぞれのウィンドウが別のスレッドで動いているということです。 何か値の共有をするときは、最終的なPropertyChangedやCollectionChangedのイベントの発火を各ウィンドウのUIスレッド上でやらないといけません。 サンプルでは、ReactivePropertyを使ってスレッドを切り替えています。