C# 如何在WPF应用程序中检测窗口何时被拖动到另一个监视器?

C# 如何在WPF应用程序中检测窗口何时被拖动到另一个监视器?,c#,wpf,window,C#,Wpf,Window,我试图检测WPF应用程序的窗口何时在监视器之间拖动,以便可以更改其大小以适应它被拖动到的监视器。我尝试了以下方法: private void Application_Startup(object sender, StartupEventArgs e) { SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; } public void SystemEvents_DisplaySet

我试图检测WPF应用程序的窗口何时在监视器之间拖动,以便可以更改其大小以适应它被拖动到的监视器。我尝试了以下方法:

private void Application_Startup(object sender, StartupEventArgs e)
{
        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
}

public void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
        Console.WriteLine("Changed");
}
但是,当我将窗口移动到另一个监视器时,不会调用
SystemEvents\u DisplaySettingsChanged


另外,我不知道这是否是保持应用程序大小响应的最佳方法。

您可以在窗口的构造函数中为
LocationChanged
设置事件处理程序:

this.LocationChanged += MainWindow_LocationChanged;
并检查事件处理程序中的监视器:

private void MainWindow_LocationChanged(object sender, EventArgs e)
{
    System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(new System.Windows.Interop.WindowInteropHelper(this).Handle);
    //evaluate the screen variable
}

当您移动窗口时,将引发LocationChanged。如果应用程序能够检测到移动的结束,可能会更好。我在WPF中找不到任何合适的事件。对于WPF,除了System.Windows.Forms之外,还有其他选择吗?@user2250152恐怕WPF中没有其他选择,至少我不知道。答案是如何做到这一点。OP可以根据需要进行调整。