사용자가 별도의 창에서 앱의 독립적인 부분을 볼 수 있도록 하여 생산성을 높일 수 있습니다. 앱에 대해 여러 창을 만들 때 각 창은 독립적으로 동작합니다. 작업 표시줄에는 각 창이 개별적으로 표시됩니다. 사용자는 앱 창을 독립적으로 이동, 크기 조정, 표시 및 숨길 수 있으며 앱 창 간에 별도의 앱인 것처럼 전환할 수 있습니다. 각 창은 자체 스레드에서 작동합니다.
중요 API: ApplicationViewSwitcher, CreateNewView
보기란?
앱 보기는 앱이 콘텐츠를 표시하는 데 사용하는 스레드와 창의 1:1 페어링입니다. 은 Windows.ApplicationModel.Core.CoreApplicationView 개체로 나타납니다.
보기는 CoreApplication 개체에 의해 관리됩니다. CoreApplication.CreateNewView를 호출하여 CoreApplicationView 개체를 만듭니다. CoreApplicationView는 CoreWindow 및 CoreDispatcher(CoreWindow 및 Dispatcher 속성에 저장됨)을 통합합니다. Windows 런타임이 핵심 Windows 시스템과 상호 작용하는 데 사용하는 개체로 CoreApplicationView를 생각할 수 있습니다.
일반적으로 CoreApplicationView와 직접 작업하지 않습니다. 대신 Windows 런타임은 Windows.UI.ViewManagement 네임스페이스에 ApplicationView 클래스를 제공합니다. 이 클래스는 앱이 창 시스템과 상호 작용할 때 사용하는 속성, 메서드 및 이벤트를 제공합니다. ApplicationView사용하려면 현재 CoreApplicationView스레드에 연결된 ApplicationView 인스턴스를 가져오는 static 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);
}
새 보기를 표시하려면
CoreApplication.CreateNewView를 호출하여 보기 콘텐츠에 대한 새 창과 스레드를 만듭니다.
CoreApplicationView newView = CoreApplication.CreateNewView();
새 보기의 ID을(를) 추적합니다. 이것은 나중에 뷰를 표시하는 데 사용됩니다.
당신이 만든 보기를 추적할 수 있도록 앱에 일부 인프라를 구축하는 것도 고려할 수 있습니다. 예제를 위해
ViewLifetimeControl
클래스를 참조하세요.int newViewId = 0;
새 스레드에서 창을 채웁다.
CoreDispatcher.RunAsync 메서드를 사용하여 UI 스레드에서 새 보기에 대한 작업을 예약합니다. 람다 식을 사용하여 함수를 RunAsync 메서드에 인수로 전달합니다. 람다 함수에서 수행하는 작업은 새 뷰의 스레드에서 발생합니다.
XAML에서는 일반적으로 프레임을(를) 창의 Content 속성에 추가한 다음, 프레임을(를) 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; });
ApplicationViewSwitcher.TryShowAsStandaloneAsync호출하여 새 보기를 표시합니다.
새 보기를 만든 후 ApplicationViewSwitcher.TryShowAsStandaloneAsync 메서드를 호출하여 새 창에 표시할 수 있습니다. 이 메서드의 viewId 매개 변수는 앱의 각 보기를 고유하게 식별하는 정수입니다. ApplicationView.Id 속성이나 ApplicationView.GetApplicationViewIdForWindow 메서드를 사용하여 ID 뷰를 검색합니다.
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
기본 보기
앱이 시작될 때 만들어지는 첫 번째 보기는 기본 보기라고 합니다. 해당 보기는 CoreApplication.MainView의 속성에 저장되어 있으며, 그것의 IsMain 속성은 true입니다. 이 보기는 사용자가 만드는 것이 아닙니다. 앱에서 생성합니다. 기본 보기의 스레드는 앱의 관리자 역할을 하며 모든 앱 활성화 이벤트는 이 스레드에서 전달됩니다.
보조 보기가 열려 있으면 창 제목 표시줄에서 닫기(x) 단추를 클릭하여 주 보기의 창을 숨길 수 있지만 스레드는 활성 상태로 유지됩니다. 주 보기의 창닫기 호출하면 InvalidOperationException 발생합니다. ( Application.Exit 를 사용하여 앱을 닫습니다.) 기본 보기의 스레드가 종료되면 앱이 닫힙니다.
보조 보기
앱 코드에서 CreateNewView 를 호출하여 만드는 모든 보기를 비롯한 다른 보기는 보조 보기입니다. 기본 보기와 보조 뷰는 모두 CoreApplication.Views 컬렉션에 저장됩니다. 일반적으로 사용자 작업에 대한 응답으로 보조 보기를 만듭니다. 일부 경우에는 시스템이 앱에 부가적인 보기를 생성합니다.
비고
Windows 할당된 액세스 기능을 사용하여 키오스크 모드앱을 실행할 수 있습니다. 이렇게 하면 시스템에서 잠금 화면 위에 앱 UI를 표시하는 보조 보기를 만듭니다. 앱에서 생성한 보조 보기는 허용되지 않으므로, 키오스크 모드에서 사용자 고유의 보조 보기를 표시하려고 하면 예외가 발생합니다.
한 보기에서 다른 보기로 전환
사용자가 보조 창에서 부모 창으로 다시 이동할 수 있는 방법을 제공하는 것이 좋습니다. 이렇게 하려면 ApplicationViewSwitcher.SwitchAsync 메서드를 사용합니다. 전환 중인 창의 스레드에서 이 메서드를 호출하고 전환 중인 창의 보기 ID를 전달합니다.
await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);
SwitchAsync를 사용하는 경우 ApplicationViewSwitchingOptions 값을 지정하여 초기 창을 닫고 작업 표시줄에서 제거할지 선택할 수 있습니다.
관련 항목
- 여러 보기를 표시
- AppWindow를 사용하여 여러 보기를 표시하기
- 응용 프로그램 보기 전환기
- 새 뷰 만들기