アプリの独立した部分を別のウィンドウで表示できるようにすることで、ユーザーの生産性を高めることができます。 アプリに対して複数のウィンドウを作成すると、各ウィンドウは個別に動作します。 タスク バーには、各ウィンドウが個別に表示されます。 ユーザーは、アプリ ウィンドウを個別に移動、サイズ変更、表示、非表示にしたり、別のアプリのようにアプリ ウィンドウを切り替えることができます。 各ウィンドウは、独自のスレッドで動作します。
重要な API :、createNewView ApplicationViewSwitcher
ビューとは何ですか?
アプリ ビューは、スレッドと、アプリがコンテンツを表示するために使用するウィンドウの 1 対 1 のペアリングです。 これは、Windows.ApplicationModel.Core.CoreApplicationView オブジェクト
ビューは、CoreApplication オブジェクトによって管理されます。 CoreApplication.CreateNewView
通常、CoreApplicationViewを直接操作することはできません。 代わりに、Windows ランタイムは、Windows.UI.ViewManagement 名前空間に ApplicationView クラスを提供します。 このクラスは、アプリがウィンドウ システムと対話するときに使用するプロパティ、メソッド、およびイベントを提供します。 ApplicationViewを操作するには、静的 ApplicationView.GetForCurrentView メソッドを呼び出します。このメソッドは、現在の CoreApplicationViewのスレッドに関連付けられた ApplicationView インスタンスを取得します。
同様に、XAML フレームワークは、Windows.UI.XAML.Window オブジェクト内の CoreWindow オブジェクトをラップします。 XAML アプリでは、通常、CoreWindowを直接操作するのではなく、Window オブジェクトを操作します。
新しいビューを表示する
各アプリ レイアウトは一意ですが、新しいウィンドウで開くことができるコンテンツの右上隅など、予測可能な場所に "新しいウィンドウ" ボタンを含めてお勧めします。 また、[新しいウィンドウで開く] にコンテキスト メニュー オプションを含めることもできます。
新しいビューを作成する手順を見てみましょう。 ここでは、ボタンのクリックに応じて新しいビューが起動します。
private async void Button_Click(object sender, RoutedEventArgs e)
{
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Frame frame = new Frame();
frame.Navigate(typeof(SecondaryPage), null);
Window.Current.Content = frame;
// You have to activate the window in order to show it later.
Window.Current.Activate();
newViewId = ApplicationView.GetForCurrentView().Id;
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}
新しいビューを表示するには
CoreApplication.CreateNewView
呼び出して、ビュー コンテンツの新しいウィンドウとスレッドを作成します。 CoreApplicationView newView = CoreApplication.CreateNewView();新しいビューの ID を追跡します。 これを使用して、後でビューを表示します。
作成したビューの追跡に役立つインフラストラクチャをアプリに組み込む場合があります。 例については、
ViewLifetimeControlの クラスを参照してください。int newViewId = 0;新しいスレッドで、ウィンドウを設定します。
CoreDispatcher.RunAsync メソッドを使用して、新しいビューの UI スレッドでの作業をスケジュールします。 ラムダ式 を使用して、RunAsync メソッドに関数を引数として渡します。 ラムダ関数で行う作業は、新しいビューのスレッドで行われます。
XAML では、通常、フレーム を ウィンドウの Content プロパティに追加し、アプリコンテンツを定義した XAML ページ に フレーム を移動します。 フレームとページの詳細については、「2 つのページ間のピア ツー ピア ナビゲーション を参照してください。
新しい ウィンドウ が設定されたら、後で ウィンドウ を表示するには、Windowの Activate メソッドを呼び出す必要があります。 この作業は新しいビューのスレッドで行われるため、新しい ウィンドウ がアクティブになります。
最後に、後でビューを表示するために使用する新しいビューの ID を取得します。 ここでも、この作業は新しいビューのスレッド上にあるため、ApplicationView.GetForCurrentView
は、新しいビューの ID を取得します。await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Frame frame = new Frame(); frame.Navigate(typeof(SecondaryPage), null); Window.Current.Content = frame; // You have to activate the window in order to show it later. Window.Current.Activate(); newViewId = ApplicationView.GetForCurrentView().Id; });を呼び出して、ApplicationViewSwitcher.TryShowAsStandaloneAsyncにより新しいビューを表示します。
新しいビューを作成した後、ApplicationViewSwitcher.TryShowAsStandaloneAsync メソッドを呼び出すことで、新しいウィンドウに表示できます。 このメソッドの viewId パラメーターは、アプリ内の各ビューを一意に識別する整数です。 ApplicationView.Id プロパティまたは ApplicationView.GetApplicationViewIdForWindow メソッドを使用して、ビュー ID を取得します。
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
メイン ビュー
アプリの起動時に作成される最初のビューは、メイン ビューと呼ばれます。 このビューは CoreApplication.MainView プロパティに格納され、その IsMain プロパティは true です。 このビューは作成しません。アプリによって作成されます。 メイン ビューのスレッドはアプリのマネージャーとして機能し、すべてのアプリアクティブ化イベントはこのスレッドで配信されます。
セカンダリ ビューが開いている場合、メイン ビューのウィンドウを非表示にすることができます。たとえば、ウィンドウのタイトル バーの [閉じる ] (x) ボタンをクリックすると、そのスレッドはアクティブなままです。 メイン ビューの ウィンドウ で Close を呼び出すと、InvalidOperationException が発生します。 (Application.Exit を使用してアプリを閉じます)。メイン ビューのスレッドが終了すると、アプリは閉じます。
副視点
その他のビュー (アプリ コードで CreateNewView
注
Windows の「割り当てアクセス」 機能を使って、アプリをキオスクモード で実行できます。 これを行うと、システムによってセカンダリ ビューが作成され、ロック画面の上にアプリ UI が表示されます。 アプリで作成されたセカンダリ ビューは許可されないため、キオスク モードで独自のセカンダリ ビューを表示しようとすると、例外がスローされます。
1 つのビューから別のビューに切り替える
ユーザーがセカンダリ ウィンドウから親ウィンドウに戻る方法を提供することを検討してください。 これを行うには、ApplicationViewSwitcher.SwitchAsync メソッドを使用します。 切り替えるウィンドウのスレッドからこのメソッドを呼び出し、切り替えるウィンドウのビュー ID を渡します。
await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);
SwitchAsyncを使用する場合は、初期ウィンドウを閉じてタスク バーから削除するかどうかを選択できます。そのためには、ApplicationViewSwitchingOptionsの値を指定します。
関連トピック
- 複数のビューを表示
- AppWindow を使用して複数のビューを表示する
- アプリケーションビュー切り替え
- 新しいビューを作成