如何解决UWP在课堂上打开新窗口
我的项目中有太多页面,我想在一个类中写这些页面的开始和结束。但是它不会打开新页面。
谢谢。
我的班级代码
class Class
{
public static void GoToOpenPage1()
{
Frame OpenPage1 = new Frame();
OpenPage1.Navigate(typeof(MainPage));
}
}
按钮点击代码
private void button_Click(object sender,RoutedEventArgs e)
{
Class.GoToOpenPage1();
}
解决方法
创建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
再次成为Window的内容,则可以这样编写:
var rootFrame = Window.Current.Content as Frame;
rootFrame.Navigate(typeof(MainPage));
以上内容属于页面导航,如果要打开新窗口,可以参考此文档,其中提供了详细说明:
,如果您以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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。