Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Помогите пользователям работать эффективнее, позволяя им просматривать независимые части приложения в отдельных окнах. При создании нескольких окон для приложения каждое окно ведет себя независимо. На панели задач показано каждое окно отдельно. Пользователи могут перемещать, изменять размер, отображать и скрывать окна приложений независимо и переключаться между окнами приложений, как если бы они были отдельными приложениями. Каждое окно работает в собственном потоке.
Важные API: ApplicationViewSwitcher, CreateNewView
Что такое представление?
Представление приложения представляет собой сочетание потока и окна, которое приложение использует для отображения содержимого. Он представлен объектом Windows.ApplicationModel.Core.CoreApplicationView .
Управление представлениями осуществляется объектом CoreApplication. Вы вызываете CoreApplication.CreateNewView, чтобы создать объект CoreApplicationView. CoreApplicationView объединяет CoreWindow и CoreDispatcher (которые хранятся в свойствах CoreWindow и Dispatcher). CoreApplicationView можно рассматривать как объект, который среда выполнения Windows использует для взаимодействия с основной системой Windows.
Обычно вы не работаете непосредственно с CoreApplicationView. Вместо этого среда выполнения Windows предоставляет класс ApplicationView в пространстве имен Windows.UI.ViewManagement . Этот класс предоставляет свойства, методы и события, используемые при взаимодействии приложения с системой окон. Чтобы работать с ApplicationView, вызовите статический метод ApplicationView.GetForCurrentView, который получает экземпляр ApplicationView, привязанный к текущему потоку CoreApplicationView.
Аналогичным образом платформа XAML упаковывает объект CoreWindow в объект Windows.UI.XAML.Window . В приложении XAML вы обычно взаимодействуете с объектом окна , а не напрямую с 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);
}
Показать новое представление
Вызовите CoreApplication.CreateNewView, чтобы создать новое окно и поток для содержимого представления.
CoreApplicationView newView = CoreApplication.CreateNewView();Отслеживайте идентификатор нового представления. Это можно использовать для отображения представления позже.
Вам может потребоваться создать в приложении некоторую инфраструктуру, чтобы помочь в отслеживании создаваемых представлений. См. класс
ViewLifetimeControlв примере MultipleViews для примера.int newViewId = 0;В новом потоке заполните окно данными.
Для планирования работы в потоке пользовательского интерфейса для нового представления используется метод CoreDispatcher.RunAsync. Для передачи функции в качестве аргумента в метод RunAsync использует ся лямбда-выражение. Работа, выполняемая в лямбда-функции, происходит в потоке нового представления.
В XAML вы обычно добавляете Frame в свойство Window's Content, затем перемещаете Frame на XAML Page, где вы определяете содержимое своего приложения. Дополнительные сведения о кадрах и страницах см. в разделе одноранговой навигации между двумя страницами.
После заполнения нового
необходимо вызвать методокнаокна , чтобы отобразитьактивировать окно позже. Эта работа выполняется в потоке нового представления, поэтому активируется новое окно .Наконец, получите идентификатор нового представления Id, который вы используете для отображения представления позже. Опять же, эта работа выполняется в потоке нового представления, поэтому 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; });Отобразите новое представление, вызвав ApplicationViewSwitcher.TryShowAsStandaloneAsync.
После создания нового представления его можно отобразить в новом окне, вызвав метод ApplicationViewSwitcher.TryShowAsStandaloneAsync . Параметр viewId для этого метода представляет собой целое число, которое однозначно идентифицирует каждое из представлений в приложении. Вы извлекаете идентификатор представления с помощью свойства ApplicationView.Id или методом ApplicationView.GetApplicationViewIdForWindow.
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
Основное представление
Первое представление, созданное при запуске приложения, называется основное представление. Это представление хранится в свойстве CoreApplication.MainView, а его свойство IsMain имеет значение true. Вы не создаете это представление; он создается приложением. Поток главного интерфейса служит диспетчером для приложения, а все события активации приложения обрабатываются в этом потоке.
Если вторичные представления открыты, окно основного представления может быть скрыто, например, нажав кнопку закрытия (x) в строке заголовка окна, но его поток остается активным. Вызов закрыть в окне основного представления приводит к возникновению invalidOperationException. (Используйте Application.Exit для закрытия приложения.) Если поток основного представления завершается, приложение закрывается.
Вторичные представления
Другие представления, включая все созданные представления путем вызова CreateNewView в коде приложения, являются вторичными представлениями. Основное представление и вторичные представления хранятся в коллекции CoreApplication.Views . Как правило, вы создаете вторичные представления в ответ на действие пользователя. В некоторых случаях система создает вторичные представления для вашего приложения.
Замечание
Функцию назначенного доступа Windows можно использовать для запуска приложения в режиме киоска . При этом система создает дополнительное представление для представления пользовательского интерфейса приложения над экраном блокировки. Созданные приложением вторичные представления не допускаются, поэтому при попытке показать собственное дополнительное представление в режиме киоска возникает исключение.
Переход с одного вида на другой
Рассмотрите возможность перехода пользователя из дополнительного окна обратно в родительское окно. Для этого используйте метод ApplicationViewSwitcher.SwitchAsync . Этот метод вызывается из потока окна, с которого вы переключаетесь, и вы передаете идентификатор представления окна, на который вы переключаетесь.
await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);
При использовании SwitchAsync можно выбрать, нужно ли закрыть начальное окно и удалить его с панели задач, указав значение ApplicationViewSwitchingOptions.