【问题标题】:Run code after the user has finished moving the window?在用户完成移动窗口后运行代码?
【发布时间】:2015-04-24 09:50:49
【问题描述】:

我已经制作了一个 WPF 应用程序,并且我的一个窗口需要全屏显示,但是我正在尝试获取它,以便如果用户将窗口拖动到另一台显示器,它会自动调整大小以适应该显示器。

我已经尝试了 previewmouse up down 事件,mouse up down 事件来设置一个 bool 窗口被拖动以防止代码执行,但这似乎不起作用并且窗口仍在尝试调整自身大小当它被拖动并且鼠标按下时(好像mousedown被设置为false)

调整窗口大小的代码在窗口所在的改变事件中

在执行代码以调整窗口大小以适应之前,有没有其他方法可以有效地检测到鼠标已按下并将窗口拖动到另一个监视器?

当用户拖动窗口时,我不希望代码调整它的大小以执行,一旦用户完成拖动窗口,应该执行将窗口大小调整到新屏幕的代码。

目前我无法在窗口完成移动后运行代码。 经过进一步调查,鼠标在标题边框上释放后不会触发鼠标向上事件。

【问题讨论】:

  • 请添加正确的标题。很少有人阅读标题不完整或令人困惑的问题,导致没有答案
  • 刚刚做了,抱歉。

标签: c# wpf


【解决方案1】:

您可以为任何 UI 元素覆盖 OnPreviewMouseMove。

protected override void OnPreviewMouseMove(MouseEventArgs e)

然后使用该处理程序的事件参数(类型为 MouseEventArgs) - 您检查是否按下鼠标左键(表示拖动)。

e.LeftButton == MouseButtonState.Pressed

【讨论】:

  • 我已经用一些额外的细节更新了问题和描述,这比鼠标移动效果更好,但是窗口永远不会调整大小,因为 e.LeftButton != MouseButtonState.Pressed 在 locationchanged 中永远不会为真事件
【解决方案2】:

当您开始拖动最大化的窗口时,大小会发生变化。这是 Windows 的行为方式,对用户来说是自然的。在拖动结束时,您可以将状态设置回最大化。

Application.Current.MainWindow.WindowState = WindowState.Maximized;

【讨论】:

  • 我已经用一些额外的细节更新了问题和描述,我有代码来最大化窗口但是不能让它只在用户完成移动窗口时运行
【解决方案3】:

【讨论】:

  • 是的,不幸的是它在窗口被改变时执行我需要在窗口位置改变后执行一些东西
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
相关资源
最近更新 更多