#uwp #windows-10-iot-core #new-window #openpages
#uwp #windows-10-iot-core #новое окно #открытые страницы
Вопрос:
В моем проекте слишком много страниц, и я хочу записать открытие и закрытие этих страниц в одном классе. Но оно не открывается на новую страницу.
Спасибо.
Мой код класса
class Class
{
public static void GoToOpenPage1()
{
Frame OpenPage1 = new Frame();
OpenPage1.Navigate(typeof(MainPage));
}
}
Код нажатия кнопки
private void button_Click(object sender, RoutedEventArgs e)
{
Class.GoToOpenPage1();
}
Комментарии:
1. Могу ли я узнать, что приложение работает на Windows IoT Core? Если да, ядро Windows IoT поддерживает только одностраничное приложение UWP, оно не может открыть новую страницу, как на рабочем столе Windows.
Ответ №1:
После того, как вы создадите Frame
, его необходимо вставить в текущее визуальное дерево, чтобы его можно было «увидеть».
Например, мы создаем Сетку в MainPage.xaml
.
<Grid x:Name="FrameContainer" x:FieldModifier="public">
</Grid>
В MainPage.xaml.cs
мы можем предоставить экземпляр MainPage через статические переменные.
public static MainPage Current;
public MainPage()
{
this.InitializeComponent();
Current = this;
}
Таким образом, когда MainPage
загружено, FrameContainer
также будет загружено. Мы можем получить это Grid
извне через MainPage.Current.FrameContainer
, а затем вставить Frame
сгенерированное нами в это Grid
, что завершает этап вставки в визуальное дерево.
public static void GoToOpenPage1()
{
Frame OpenPage1 = new Frame();
OpenPage1.Navigate(typeof(OtherPage));
MainPage.Current.FrameContainer.Children.Clear();
MainPage.Current.FrameContainer.Children.Add(OpenPage1);
}
Но, судя по предоставленному вами коду, вы, похоже, переходите к MainPage
. Если вам нужно заставить MainPage
снова стать содержимым окна, вы можете написать так:
var rootFrame = Window.Current.Content as Frame;
rootFrame.Navigate(typeof(MainPage));
Приведенный выше контент относится к навигации по страницам, если вы хотите открыть новое окно, вы можете обратиться к этому документу, в котором содержатся подробные инструкции:
Ответ №2:
Если вы нацелены на Windows 10 версии 1903 (SDK 18362) или более поздней, вы можете открыть окно с помощью AppWindow
API:
class Class
{
public static async Task GoToOpenPage1()
{
AppWindow appWindow = await AppWindow.TryCreateAsync();
Frame OpenPage1 = new Frame();
OpenPage1.Navigate(typeof(MainPage));
ElementCompositionPreview.SetAppWindowContent(appWindow, OpenPage1);
await appWindow.TryShowAsync();
}
}
В более ранних версиях вы должны создать CoreApplicationView
:
class Class
{
public static async Task GoToOpenPage1()
{
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Frame OpenPage1 = new Frame();
OpenPage1.Navigate(typeof(MainPage));
Window.Current.Content = OpenPage1;
Window.Current.Activate();
newViewId = ApplicationView.GetForCurrentView().Id;
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}
}