C# 如何在WPF应用程序中检测窗口何时被拖动到另一个监视器?
我试图检测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
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可以根据需要进行调整。