UWP Открыть новое окно в классе

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