当我点击通用应用程序主窗口中的button时,如何打开一个新的框架窗口,其中包含另一个xaml页面?
你可以在这里找到一个关于如何从GitHub上的官方微软示例中获得的示例,但是我会在这里快速总结一下。 在Mike Taulty的博客上可以找到另一个更简单的实现。
既然你没有指定开发语言,我将假设C#和XAML。
在XAML中创建您的按钮将被点击创建一个新的窗口:
<Button Content="Create" HorizontalAlignment="Center" VerticalAlignment="Center" Click="OnCreate" />
在后面的代码中,添加您的OnCreate点击处理程序:
async void OnCreate(object sender, RoutedEventArgs e) { CoreApplicationView newCoreView = CoreApplication.CreateNewView(); ApplicationView newAppView = null; int mainViewId = ApplicationView.GetApplicationViewIdForWindow( CoreApplication.MainView.CoreWindow); await newCoreView.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, () => { newAppView = ApplicationView.GetForCurrentView(); Window.Current.Content = new SubWindowUserControl(); Window.Current.Activate(); }); await ApplicationViewSwitcher.TryShowAsStandaloneAsync( newAppView.Id, ViewSizePreference.UseHalf, mainViewId, ViewSizePreference.UseHalf); }
这将创建一个新窗口,并提取原始窗口的应用程序视图ID供您参考。 然后等待一个调度的线程运行(在新窗口的UI线程中),以获得窗口包含的新视图,它以编程SubWindowUserControl
向其中添加一个新的SubWindowUserControl
,然后激活(您必须记得这样做)。 新窗口随后使用一些标准参数显示在新的独立窗口中。
查看这里的API文档,了解更多关于ApplicationViewSwitcher类的细节。
要获取此代码并使其显示一个新的XAML页面,您可以创建新的页面,并在OnCreate代码中的新窗口上更改运行的异步任务,如下所示:
await newCoreView.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, () => { newAppView = ApplicationView.GetForCurrentView(); Window.Current.Content = new Frame(); (Window.Current.Content as Frame).Navigate(typeof(<your_page>)); Window.Current.Activate(); });
而不是显示一个新的自定义XAML元素作为其内容,而是创建一个新的Frame
,然后导航,以显示您的XAML页面。
希望这可以帮助!