You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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设计逻辑的:

  1. 用SettingsFlyout控件替代
    这是微软给的官方替代方案,你可以把原来的每个设置项做成独立的SettingsFlyout页面,然后在应用内触发显示(比如加个设置按钮):

    // 示例:触发Location设置面板
    private void OpenLocationSettings()
    {
        var locationFlyout = new LocationSettingsFlyout(); // 你需要创建的自定义SettingsFlyout
        locationFlyout.Show();
    }
    

    把原来的“Location”和“UI Options”分别做成两个SettingsFlyout,每个面板里实现对应的设置逻辑,完美对应原来的SettingsCommand功能。

  2. 整合到应用内的设置页面
    如果你的应用已经有导航结构(比如用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:55:13