10

私はTryShowAsStandaloneAsyncを使って別のウィンドウを開く方法を知っています。ただし、元のウィンドウが閉じている場合 - TryShowAsStandaloneAsyncが失敗します(理由は?)。 And I don't know how to "revive" it(元のウィンドウ)。どのようにユニバーサルウィンドウアプリケーションは、複数の独立したウィンドウを持つことができます(マイクロソフトのアプリ「写真」のように)?

しかし、「写真」はデスクトップアプリケーションと同じように正常に動作しているようです。それはどうですか? (私はそれをエミュレートしたいと思います。)画像を持つウィンドウを開き、別のウィンドウを開き、最初のウィンドウを閉じて、さらにウィンドウを開くことができます。

メインウィンドウを表示せずにウィンドウを起動する方法、またはメインウィンドウを閉じた後に復帰させる何らかの方法(開いている新しいウィンドウにするため)何か他の方法。

答えて

3

MultipleViews sample appを見てください。このアプリはあなたが説明している問題を抱えています。

作成した各ビューには独自のUIスレッドが存在するため、ディスパッチャーになります。 このアプリケーションの鍵は、現在アクティブなウィンドウのディスパッチャからTryShowAsStandaloneAsyncが呼び出されていることです。

サンプルのOnLaunchedイベントでは、コードは起動引数のビューIDを使用して、現在開いているビューへの参照を探します。次に、そのビューに関連付けられたディスパッチャを使用して、そのビューのUIスレッドでDispatcher.RunAsyncを使用してUIコードを呼び出します。開いているウィンドウのスレッドを使用して、TryShowAsStandaloneAsyncを呼び出して新しいメインビューを起動する必要があります。新しいメインビューのディスパッチャを使用してWindow.Activateに電話することができます。

私はTryShowAsStandaloneAsync試みがアンカービュー(すなわち、新しいウィンドウを相対配置するウィンドウ)としてメインビューを使用すると思う:あなたは、メインウィンドウを閉じた後TryShowAsStandaloneAsyncが失敗した理由を

-3

私はすなわち、あなたがビューを作成するためにDispatcher.RunAsyncを使用しているかはわからない:詳細は

async private void Button_Click(object sender, RoutedEventArgs e) 
{ 
CoreApplicationView newView = CoreApplication.CreateNewView(); 
int newViewId = 0; 

await newView.Dispatcher.RunAsync(CoreDispatcherPriority.High,() => 
{ 
var frame = new Frame(); 
frame.Navigate(typeof(MainPage), newViewId); 
Window.Current.Content = frame; 

// In Windows 10 UWP we need to activate our view first. 
// Let's do it now so that we can use TryShow...() and SwitchAsync(). 
Window.Current.Activate(); 

newViewId = ApplicationView.GetForCurrentView().Id; 
}); 

bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId); 
} 

、を参照してください。https://daxsnippets.wordpress.com/2015/07/09/windows-10-create-views/

+0

私が言ったように、私は追加のウィンドウを開く方法を知っています。この問題は、メインウィンドウが閉じられた後にのみ発生します。 – ispiro

1

は答えます。

アンカービューがないため、メインウィンドウを閉じると、TryShowAsStandaloneAsyncは失敗します。

await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
    viewIdToShow, // Id of a new view, or of your hidden main view 
    ViewSizePreference.Default, 
    anchorViewId, // Id of one of your visible windows 
    ViewSizePreference.Default); 

this answerから:

回避策はTryShowAsStandaloneAsyncの過負荷を経由して、開いているビュー(あなたが前にメインウィンドウを閉じるに開かれた新しいウィンドウのいずれか)のanchorViewIdを指定することです。

関連する問題