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

使用Prism实现WPF应用在第二显示器展示全屏窗口的问题咨询

Prism WPF 双独立窗口实现方案

对话框方案适用性说明

不推荐使用Prism的IDialogService弹出第二窗口,原因如下:

  • Prism对话框默认关联主窗口视觉树,主窗口最小化、关闭时对话框会同步响应,不符合第二窗口独立显示的需求
  • 对话框默认内置样式、交互逻辑,要改成跨屏无边框全屏需要重写大量默认配置,冗余度高

最优实现方案:独立注册+手动管理窗口生命周期

Prism原生支持多顶级窗口的管理,你可以按如下步骤实现:

1. 注册第二窗口

先创建第二窗口DrawingWindow及对应的DrawingWindowViewModel,在App.xaml.cs的RegisterTypes方法中注册窗口类型:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    // 其他服务注册逻辑
    containerRegistry.Register<DrawingWindow>();
    // 若需要用到Prism的导航功能,也可以用RegisterForNavigation注册
    // containerRegistry.RegisterForNavigation<DrawingWindow, DrawingWindowViewModel>();
}

2. 应用启动时加载双窗口

重写OnInitialized方法,在主窗口启动完成后解析第二窗口实例,配置跨屏参数后显示:

protected override void OnInitialized()
{
    base.OnInitialized();
    // 解析第二窗口实例,依赖注入会自动关联对应的ViewModel
    var drawingWindow = Container.Resolve<DrawingWindow>();
    
    // 检测第二显示器
    if (System.Windows.Forms.Screen.AllScreens.Length >= 2)
    {
        var secondScreen = System.Windows.Forms.Screen.AllScreens[1];
        // 配置窗口位置到第二显示器,开启无边框全屏
        drawingWindow.Left = secondScreen.Bounds.Left;
        drawingWindow.Top = secondScreen.Bounds.Top;
        drawingWindow.Width = secondScreen.Bounds.Width;
        drawingWindow.Height = secondScreen.Bounds.Height;
        drawingWindow.WindowStyle = WindowStyle.None;
        drawingWindow.WindowState = WindowState.Maximized;
        // 禁用 Alt+F4 等关闭逻辑可自行加额外配置
    }
    // 显示第二窗口
    drawingWindow.Show();
    // 配置应用关闭规则:主窗口关闭时退出,第二窗口关闭不影响主程序运行
    ShutdownMode = ShutdownMode.OnMainWindowClose;
}

如果不想引入WinForms的依赖,也可以用WPF原生的System.Windows.SystemParameters或者VisualTreeHelper获取显示器参数,逻辑完全一致。

3. 窗口间通信

如果需要主窗口和绘图窗口交互,直接使用Prism自带的IEventAggregator实现事件的发布订阅即可,无需直接持有窗口实例,保证解耦。

方案优势

  • 两个窗口为完全独立的顶级窗口,生命周期、显示状态互不干扰
  • 可以完全自定义绘图窗口的所有样式、交互逻辑,没有对话框服务的默认规则约束
  • 完全遵循Prism的依赖注入规范,ViewModel的依赖注入、绑定逻辑和普通Prism窗口完全一致,不需要额外适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:45:03