Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 使用DragMove移动窗口时捕捉鼠标移动_Wpf_Window_Move_Mousemove - Fatal编程技术网

Wpf 使用DragMove移动窗口时捕捉鼠标移动

Wpf 使用DragMove移动窗口时捕捉鼠标移动,wpf,window,move,mousemove,Wpf,Window,Move,Mousemove,我有一个无边界的WPF窗口(WindowStyle=“None”),可以通过捕获LeftMouseDown然后调用DragMove来移动它。那很好 但是,我想防止窗口的任何部分离开屏幕区域。 我捕捉到位置已更改,但在窗口已经移动后调用,因此在该事件中对窗口位置所做的任何更改都会导致窗口跳回,这看起来非常不专业 我是否可以捕捉到在实际移动窗口之前触发的事件。 我试过MouseMove和PreviewMouseMove,但它们在DragMove期间没有被解雇 这些东西在WinForms中运行良好 是

我有一个无边界的WPF窗口(WindowStyle=“None”),可以通过捕获LeftMouseDown然后调用DragMove来移动它。那很好

但是,我想防止窗口的任何部分离开屏幕区域。 我捕捉到位置已更改,但在窗口已经移动后调用,因此在该事件中对窗口位置所做的任何更改都会导致窗口跳回,这看起来非常不专业

我是否可以捕捉到在实际移动窗口之前触发的事件。 我试过MouseMove和PreviewMouseMove,但它们在DragMove期间没有被解雇

这些东西在WinForms中运行良好

是否有人对此有解决方案,或者这仅仅是由于WPF的不成熟性质和状态

这些东西在WinForms中运行良好

是的,但另一方面,WinForms没有
DragMove
。。。您可以尝试使用与WinForms中相同的方法,通过处理
MouseMove
并自己移动窗口

另一个选项是使用
强制值回调
覆盖
顶部
左侧
依赖项属性的元数据,以防止窗口离开屏幕。不过,我不确定这是否行得通

这些东西在WinForms中运行良好

是的,但另一方面,WinForms没有
DragMove
。。。您可以尝试使用与WinForms中相同的方法,通过处理
MouseMove
并自己移动窗口


另一个选项是使用
强制值回调
覆盖
顶部
左侧
依赖项属性的元数据,以防止窗口离开屏幕。不确定这是否有效,但是…

我没有使用强制值回调方法(如果任何人有此方法的解决方案,请分享)

我的解决方案: 截获WPF WndProc中的WM_WindowPosChangeing消息。在这里发布解决方案有点长,但这里有两个链接让我走上了正确的轨道:

(在这一链接中有一些反对者表示WndProc不会与WPF合作。 我不能用那种一般的方式来评论这句话,但在这种特殊情况下,它就像一种魅力。)


将OnPreviewPositionChange的主体放在WndProc中。

我没有使用强制值回调方法(如果任何人有此方法的解决方案,请共享)

我的解决方案: 截获WPF WndProc中的WM_WindowPosChangeing消息。在这里发布解决方案有点长,但这里有两个链接让我走上了正确的轨道:

(在这一链接中有一些反对者表示WndProc不会与WPF合作。 我不能用那种一般的方式来评论这句话,但在这种特殊情况下,它就像一种魅力。)


将OnPreviewPositionChange的主体放入WndProc。

谢谢,托马斯。我会调查的,谢谢,托马斯。我会调查的。