Windows 10 UWP中SettingsPane替代方案及迁移实现咨询
从Windows 8.1 Metro迁移UWP:替代弃用的SettingsPane方案
最近把Windows 8.1的Metro应用迁去UWP,踩了个大坑——原来的SettingsPane直接被弃用了!翻微软的文档只有设计指南,完全没说具体怎么实现,搜了一堆问题也没找到靠谱的解决办法。贴下我的核心代码和报错,求个可行的迁移路径:
核心代码
protected override void OnWindowCreated(WindowCreatedEventArgs args) { base.OnWindowCreated(args); SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested; } private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) { AddCommand(args, "Location", ShowConnectionSettingsFlyout); AddCommand(args, "UI Options", ShowUISettingsFlyout); } private void AddCommand(SettingsPaneCommandsRequestedEventArgs args, string label, UICommandInvokedHandler handler) { args.Request.ApplicationCommands.Add(new SettingsCommand(label, label, handler)); }
报错信息
- Error CS1069: 命名空间'Windows.UI.ApplicationSettings'中找不到类型名'SettingsPane'...
- Error CS0731: 程序集'Windows'中类型'Windows.UI.ApplicationSettings.SettingsPaneCommandsRequestedEventArgs'的类型转发导致循环...
- Error CS0103: 当前上下文中不存在名称'SettingsPane'的内容
可行的迁移方案
UWP里已经彻底砍掉了SettingsPane,官方推荐的替代方式主要有两种,都是更贴合UWP设计逻辑的:
用
SettingsFlyout控件替代
这是微软给的官方替代方案,你可以把原来的每个设置项做成独立的SettingsFlyout页面,然后在应用内触发显示(比如加个设置按钮):// 示例:触发Location设置面板 private void OpenLocationSettings() { var locationFlyout = new LocationSettingsFlyout(); // 你需要创建的自定义SettingsFlyout locationFlyout.Show(); }把原来的“Location”和“UI Options”分别做成两个
SettingsFlyout,每个面板里实现对应的设置逻辑,完美对应原来的SettingsCommand功能。整合到应用内的设置页面
如果你的应用已经有导航结构(比如用NavigationView),直接把设置功能整合到专门的设置页面里更合适,用户体验也更连贯:// 示例:NavigationView的导航事件处理 private void NavigationView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args) { if (args.InvokedItem.ToString() == "设置") { Frame.Navigate(typeof(SettingsPage)); } }在
SettingsPage里可以用Pivot分标签,或者用Expander折叠面板,把Location和UI Options作为不同的设置模块,比原来的侧边栏更灵活。
另外要注意,UWP已经移除了Windows.UI.ApplicationSettings下的SettingsPane相关类型,所以代码里的这些引用要全部清理掉,换成上面的方案就行。
内容的提问来源于stack exchange,提问作者verrukt
相关产品推荐
相关产品推荐

