共用方式為


使用 ApplicationView 顯示多個檢視

讓他們在個別的視窗中檢視應用程式的獨立部分,協助使用者提高生產力。 當您為應用程式建立多個視窗時,每個視窗都會獨立運作。 任務欄會分別顯示每個視窗。 用戶可以獨立移動、重設大小、顯示和隱藏應用程式視窗,而且可以在應用程式視窗之間切換,就像是個別的應用程式一樣。 每個視窗都會在其自己的線程中運作。

重要 APIApplicationViewSwitcherCreateNewView

什麼是視圖?

應用程式視圖是線程與視窗的 1:1 配對,應用程式利用這個配對來顯示內容。 它是由 Windows.ApplicationModel.Core.CoreApplicationView 物件表示。

檢視是由 CoreApplication 物件所管理。 您可以呼叫 CoreApplication.CreateNewView 來建立 CoreApplicationView 物件。 CoreApplicationView 彙集了 CoreWindowCoreDispatcher(儲存在 CoreWindowDispatcher 属性中)。 您可以將 CoreApplicationView 視為 Windows 執行時間用來與核心 Windows 系統互動的物件。

您通常不會直接使用 CoreApplicationView。 相反地,Windows 運行時間會在 Windows.UI.ViewManagement 命名空間中提供 ApplicationView 類別。 這個類別提供當您的應用程式與視窗化系統互動時所使用的屬性、方法和事件。 若要使用 ApplicationView,請呼叫靜態 ApplicationView.GetForCurrentView 方法,此方法會取得系結至目前 CoreApplicationView 線程的 ApplicationView 實例。

同樣地,XAML 架構會將 CoreWindow 物件包裝在 Windows.UI.XAML.Window 物件中。 在 XAML 應用程式中,您通常會與 Window 物件互動,而不是直接使用 CoreWindow

顯示新檢視

雖然每個應用程式配置都是唯一的,但建議您在可預測的位置中包含「新視窗」按鈕,例如可在新視窗中開啟的內容右上角。 也請考慮包含右鍵選單選項來「在新視窗中開啟」。

讓我們看看建立新檢視的步驟。 在這裡,新的檢視會在按鈕按一下後啟動。

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);
}

顯示新的檢視

  1. 呼叫 CoreApplication.CreateNewView 來建立檢視內容的新視窗和線程。

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. 追蹤新檢視 標識碼。 您稍後會使用這個來顯示畫面。

    您可能想要考慮在應用程式中建置一些基礎結構,以協助追蹤您所建立的檢視。 ViewLifetimeControl如需範例,請參閱 MultipleViews 範例中的 類別。

    int newViewId = 0;
    
  3. 在新執行緒上,填滿視窗。

    您可以使用 CoreDispatcher.RunAsync 方法來安排在新檢視的 UI 執行緒上工作。 您可以使用 lambda 表達式 將函式作為參數傳遞至 RunAsync 方法。 您在 lambda 函式中執行的工作會在新檢視的執行緒上運行。

    在 XAML 中,您通常會將 Frame 新增至 WindowContent 屬性,然後將 Frame 瀏覽至您已定義應用程式內容的 XAML 頁面 。 如需框架和頁面的詳細資訊,請參閱 兩個頁面之間的點對點流覽

    填入新的 Window 之後,您必須呼叫 WindowActivate 方法,以便稍後顯示 Window 。 這項工作發生在新檢視的執行緒上,因此會啟動新的 視窗

    最後,取得您稍後用來顯示檢視的新檢視 標識碼。 同樣地,這項工作位於新檢視的線程上,因此 ApplicationView.GetForCurrentView 取得新檢視的 標識符

    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;
    });
    
  4. 呼叫 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 建立的所有檢視,都是次要檢視。 主要檢視和次要檢視都會儲存在 CoreApplication.Views 集合中。 一般而言,您會建立次要檢視來回應用戶動作。 在某些情況下,系統會為您的應用程式建立次要檢視。

備註

您可以使用 Windows 指定存取功能,在資訊站模式 中執行應用程式。 當您這樣做時,系統會建立次要檢視,以在鎖定畫面上方呈現您的應用程式 UI。 不允許應用程式建立的次要檢視,因此如果您嘗試以 kiosk 模式顯示自己的次要檢視,則會擲回例外狀況。

從某個檢視切換到另一個檢視

請考慮提供讓使用者從次要視窗巡覽回其父視窗的方式。 若要這樣做,請使用 ApplicationViewSwitcher.SwitchAsync 方法。 您可以從您要切換之視窗的線程呼叫這個方法,並傳遞您要切換之視窗的檢視標識碼。

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

當您使用 SwitchAsync 時,您可以選擇是否要關閉初始視窗,並藉由指定 ApplicationViewSwitchingOptions 的值,從任務欄移除它。