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

WPF双屏窗口第二次显示时位置异常问题

WPF双显示器窗口第二次显示位置异常问题

环境与配置

  • 显示器参数:
    • 显示器1:分辨率5120x1440,工作区矩形:Left=0, Top=0, Width=5120, Height=1392
    • 显示器2:分辨率2560x1440,开启125%缩放且存在显示偏移,工作区矩形:Left=5120, Top=353, Width=2048, Height=1104
  • 实现逻辑:通过Screen.AllScreens[0].WorkingArea和Screen.AllScreens[1].WorkingArea获取对应显示器工作区,分别显示两个独立窗口

问题现象

  • 首次调用显示逻辑时,两个窗口分别在对应显示器上正常布局
  • 第二次调用显示逻辑时,代码中已为Window 2设置正确位置,但实际显示在(0,0)位置,与Window 1重叠
  • 后续再次调用显示逻辑时,Window 2位置恢复正常

已尝试方案

调整窗口属性、添加显示延迟、修改显示器缩放/偏移设置、在Show()后重设窗口位置,均未解决问题


测试代码

MainWindow.xaml(MainWindow.xaml.cs无修改)

<Window x:Class="TestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        WindowStartupLocation="Manual"
        ShowInTaskbar="False"
        ResizeMode="NoResize">
    <Grid>
        <Label Content="ABCD" Foreground="Red" FontSize="36" />
    </Grid>
</Window>

App.xaml(移除StartupUri)

<Application x:Class="TestApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:TestApp">
    <Application.Resources>
         
    </Application.Resources>
</Application>

后台代码

using Gma.System.MouseKeyHook;
using System.Diagnostics;
using System.Windows;
using System.Windows.Forms;

namespace TestApp
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : System.Windows.Application
    {
        MainWindow window1 = new MainWindow();
        MainWindow window2 = new MainWindow();

        private IKeyboardMouseEvents keyboardMouseEvents = Hook.GlobalEvents();

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            keyboardMouseEvents.KeyUp += KeyboardMouseEvents_KeyUp;

            window1.Title = "WINDOW 1";
            window2.Title = "WINDOW 2";
        }

        private void KeyboardMouseEvents_KeyUp(object? sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == System.Windows.Forms.Keys.LControlKey)
            {
                Toggle();
            }
        }

        private void Show()
        {
            window1.Left = Screen.AllScreens[0].WorkingArea.Left;
            window1.Top = Screen.AllScreens[0].WorkingArea.Top;
            window1.Width = Screen.AllScreens[0].WorkingArea.Width;
            window1.Height = Screen.AllScreens[0].WorkingArea.Height;
            window1.Show();

            window2.Left = Screen.AllScreens[1].WorkingArea.Left;
            window2.Top = Screen.AllScreens[1].WorkingArea.Top;
            window2.Width = Screen.AllScreens[1].WorkingArea.Width;
            window2.Height = Screen.AllScreens[1].WorkingArea.Height;
            Debug.WriteLine($"Left {window2.Left} Top {window2.Top} Width {window2.Width} Height {window2.Height}");
            window2.Show();

        }

        private void Toggle()
        {
            if (window1.IsVisible)
            {
                window1.Hide();
                window2.Hide();
            }
            else
            {
                Show();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:23:14