다음을 통해 공유


ApplicationView를 사용하여 여러 보기 표시

앱의 독립적인 부분을 개별 창에서 볼 수 있도록 하면 사용자의 생산성을 높이는 데 도움이 됩니다. 앱에 대해 여러 창을 만들 때 각 창은 독립적으로 동작합니다. 작업 표시줄에는 각 창이 개별적으로 표시됩니다. 사용자는 앱 창을 독립적으로 이동, 크기 조정, 표시 및 숨길 수 있으며 별도의 앱인 것처럼 앱 창을 전환할 수 있습니다. 각 창은 자체 스레드에서 작동합니다.

Important APIs: ApplicationViewSwitcher, CreateNewView

보기란?

앱 보기는 앱이 콘텐츠를 표시하는 데 사용하는 스레드와 창의 1:1 페어링입니다. It's represented by a Windows.ApplicationModel.Core.CoreApplicationView 개체로 표시됩니다.

보기는 CoreApplication 개체에 의해 관리됩니다. CoreApplication.CreateNewView를 호출하여 CoreApplicationView 개체를 만듭니다. CoreApplicationViewCoreWindowCoreDispatcher를 함께 제공합니다(CoreWindow alc Dispatcher 속성에 저장됨). CoreApplicationView는 Windows 런타임 핵심 Windows 시스템과 상호 작용하는 데 사용하는 개체로 생각할 수 있습니다.

일반적으로 CoreApplicationView에서는 직접 작업하지 않습니다. 대신 Windows 런타임 Windows.UI.ViewManagement 네임스페이스에 ApplicationView 클래스를 제공합니다. 이 클래스는 앱이 윈도우 시스템과 상호 작용할 때 사용하는 속성, 메서드 및 이벤트를 제공합니다. ApplicationView를 사용하려면 현재 CoreApplicationView의 스레드에 연결된 ApplicationView 인스턴스를 가져오는 정적 ApplicationView.GetForCurrentView 메서드를 호출합니다.

마찬가지로 XAML 프레임워크는 CoreWindow 개체를 Windows.UI.XAML.Window 개체에 래핑합니다. 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);
}

새 보기를 표시하는 방법

  1. CoreApplication.CreateNewView를 호출하여 보기 콘텐츠에 대한 새 창과 스레드를 만듭니다.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. 새 보기의 ID를 추적합니다. 이를 사용하여 나중에 보기를 표시합니다.

    만든 보기를 추적하는 데 도움이 되도록 앱에 일부 인프라를 구축하는 것을 고려할 수 있습니다. 예제는 ViewLifetimeControl MultipleViews 샘플클래스를 참조하세요.

    int newViewId = 0;
    
  3. 새 스레드에서 창을 채웁다.

    CoreDispatcher.RunAsync 메서드를 사용하여 새 보기에 대한 UI 스레드에서 작업을 예약합니다. 람다 식을 사용하여 함수를 RunAsync 메서드에 인수로 전달합니다. 람다 함수에서 수행하는 작업은 새 뷰의 스레드에서 발생합니다.

    XAML에서는 일반적으로 프레임WindowContent 속성에 추가한 다음 프레임을 앱 콘텐츠를 정의한 XAML 페이지로 이동합니다. 프레임과 페이지에 대한 자세한 내용은 두 페이지 간의 피어 투 피어 탐색을 참조하세요.

    이 채워지면 나중에 을 표시하려면 활성화 메서드를 호출해야 합니다. 이 작업은 새 보기의 스레드에서 수행되므로 새 이 활성화됩니다.

    마지막으로 나중에 보기를 표시하는 데 사용하는 새 보기의 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;
    });
    
  4. ApplicationViewSwitcher.TryShowAsStandaloneAsync를 호출하여 새 보기를 표시합니다.

    새 보기를 만든 후 ApplicationViewSwitcher.TryShowAsStandaloneAsync 메서드를 호출하여 새 창에 표시할 수 있습니다. 이 메서드의 viewId 매개 변수는 앱의 각 보기를 고유하게 식별하는 정수입니다. ApplicationView.Id 속성 또는 ApplicationView.GetApplicationViewIdForWindow 메서드를 사용하여 Id 보기를 검색합니다.

    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
    

기본 보기

앱이 시작될 때 만들어진 첫 번째 보기를 기본 보기라고 합니다. 이 보기는 CoreApplication.MainView 속성에 저장되며 해당 IsMain 속성은 true입니다. 이 보기는 사용자가 만드는 것이 아니라 앱에서 자동으로 만들어집니다. 기본 보기의 스레드는 앱의 관리자 역할을 하며 모든 앱 활성화 이벤트는 이 스레드에서 전달됩니다.

보조 보기가 열려 있으면 기본 보기의 창을 숨길 수 있지만(예: 창 제목 표시줄에서 닫기(x) 단추 클릭) 해당 스레드는 활성 상태로 유지됩니다. 기본 보기의 Window에서 Close를 호출하면 InvalidOperationException이 발생합니다. (Application.Exit를 사용하여 앱을 닫습니다.) 기본 보기의 스레드가 종료되면 앱이 닫힙니다.

보조 보기

앱 코드에서 CreateNewView를 호출하여 만드는 모든 보기를 비롯한 다른 보기는 보조 보기입니다. 기본 보기와 보조 뷰는 모두 CoreApplication.Views 컬렉션에 저장됩니다. 일반적으로 사용자 작업에 대한 응답으로 보조 보기를 만듭니다. 경우에 따라 시스템은 앱에 대한 보조 보기를 만듭니다.

참고 항목

Windows 할당 액세스 기능을 사용하여 키오스크 모드에서 앱을 실행할 수 있습니다. 이렇게 하면 시스템에서 잠금 화면 위에 앱 UI를 표시하는 보조 보기를 만듭니다. 앱에서 만든 보조 보기는 허용되지 않으므로 키오스크 모드에서 사용자 고유의 보조 보기를 표시하려고 하면 예외가 발생됩니다.

한 보기에서 다른 보기로 전환

사용자가 보조 창에서 부모 창으로 다시 이동할 수 있는 방법을 제공합니다. 이렇게 하려면 ApplicationViewSwitcher.SwitchAsync 메서드를 사용합니다. 전환하려는 창의 스레드에서 이 메서드를 호출하고 전환하려는 창의 보기 ID를 전달합니다.

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

SwitchAsync를 사용하는 경우 ApplicationViewSwitchingOptions 값을 지정하여 초기 창을 닫고 작업 표시줄에서 제거할지 선택할 수 있습니다.