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

Surface Pro平板模式下关闭子窗口致主窗口意外关闭求助

解决Surface Pro平板模式下WPF子窗口关闭导致整个应用退出的问题

我仔细排查了你的最小复现代码和问题场景,这个在Surface Pro平板上出现的异常,核心原因是子窗口未与主窗口建立Owner关联,加上平板触摸交互下的窗口管理逻辑和桌面端存在差异,导致关闭子窗口时系统误判为所有窗口都已关闭,进而触发应用退出。

具体解决方案

1. 为子窗口设置Owner属性

在打开testWindow时,明确将其Owner设置为主窗口,这样系统就能正确识别窗口的父子关系,关闭子窗口时不会影响主窗口。修改GUI.xaml.cs中的SettingsButton_Click方法:

private void SettingsButton_Click(object sender, RoutedEventArgs e)
{
    monitoring.settingsWindow = new testWindow();
    // 关键:将子窗口的Owner绑定到主窗口
    monitoring.settingsWindow.Owner = Application.Current.MainWindow;
    monitoring.settingsWindow.Show();
}

2. 显式设置应用的ShutdownMode

默认WPF应用的ShutdownMode是OnLastWindowClose(最后一个窗口关闭时退出应用),在平板全屏无标题栏窗口场景下,容易出现系统误判。我们可以将其改为OnMainWindowClose,确保只有主窗口关闭时才退出应用。修改App.xaml.cs的ApplicationStartup方法:

private void ApplicationStartup(object sender, StartupEventArgs e)
{
    // 设置关闭模式:仅主窗口关闭时才退出应用
    ShutdownMode = ShutdownMode.OnMainWindowClose;
    window.Show();
    monitoring = new Monitoring();
    window.Content = monitoring.gui;
    this.DispatcherUnhandledException += App_DispatcherUnhandledException;
    this.Dispatcher.UnhandledException += Dispatcher_UnhandledException;
}

为什么开发机正常而Surface Pro出现问题?

桌面端的窗口管理逻辑对无Owner的子窗口兼容性更好,关闭子窗口时系统会正确识别主窗口仍在运行;但Surface Pro的触摸交互优化和全屏窗口栈管理逻辑更严格,未设置Owner的子窗口会被视为独立顶级窗口,关闭时可能触发“所有窗口关闭”的判断,导致应用退出。

验证修改

将上述两处修改应用到你的最小复现代码中,在Surface Pro平板上测试:点击主窗口的“NewWindow”按钮打开子窗口,再点击子窗口的关闭按钮,此时应该只有子窗口关闭,主窗口保持运行状态。

内容的提问来源于stack exchange,提问作者Ecuashungo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:22:54