UWP开发中如何将项目内应用页面加载至SplitView的内容区域
问题原因
- 你代码中使用
CoreApplication.CreateNewView是用于创建独立应用新窗口的API,创建的视图运行在独立UI线程中,生成的Frame属于跨线程UI元素,无法挂载到当前窗口的SplitView控件上 - 额外调用
Window.Current.Activate和TryShowAsStandaloneAsync会把新页面放在独立窗口打开,完全不符合内嵌到SplitView的需求
修改方案
1. 修改XAML代码
将SplitView.Content内的占位Button替换为内置Frame,作为固定的内容导航容器:
<SplitView x:Name="MainPanel" DisplayMode="Inline" IsPaneOpen="True"> <SplitView.Pane> <NavigationView x:Name="Navigation" SelectionChanged="Navigation_Navigate"> <NavigationView.MenuItems> <NavigationViewItem x:Name="Home" Icon="Home" Content="Home"/> <NavigationViewItem x:Name="Colours" Icon="Edit" Content="Colours"/> <NavigationViewItem Icon="Admin" Content="Security"/> <NavigationViewItem Icon="World" Content="Translate"/> </NavigationView.MenuItems> </NavigationView> </SplitView.Pane> <SplitView.Content> <Frame x:Name="ContentFrame"/> </SplitView.Content> </SplitView>
2. 修改后台C#代码
删除冗余的NavigateToApp方法和创建新视图的逻辑,直接操作ContentFrame完成导航:
private void Navigation_Navigate(NavigationView sender, NavigationViewSelectionChangedEventArgs args) { NavigationViewItem item = args.SelectedItem as NavigationViewItem; if (item == null) return; switch (item.Content.ToString()) { case "Home": ContentFrame.Navigate(typeof(MainPage)); break; case "Colours": ContentFrame.Navigate(typeof(Colours)); break; case "Translate": ContentFrame.Navigate(typeof(Translate)); break; } }
特殊场景适配
如果你要求每次加载页面都必须新建Frame对象,可以修改对应分支的逻辑:
case "Colours": Frame newFrame = new Frame(); newFrame.Navigate(typeof(Colours)); MainPanel.Content = newFrame; break;
内容的提问来源于stack exchange,提问作者Sylas Coker
相关产品推荐
相关产品推荐

