Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
C# 如果按住鼠标左键而不移动光标,则Window.DragMove()会导致窗口暂时冻结_C#_Wpf_Windows - Fatal编程技术网

C# 如果按住鼠标左键而不移动光标,则Window.DragMove()会导致窗口暂时冻结

C# 如果按住鼠标左键而不移动光标,则Window.DragMove()会导致窗口暂时冻结,c#,wpf,windows,C#,Wpf,Windows,我在WPF中有一个“无边界”窗口。可以使用以下代码从未处理Click事件的窗口的任何部分拖动它: // Drag the window: private void GlassWindow_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton != MouseButton.Left) return; if (AllowDrag) DragMove(); } (注意:在这种情况下AllowDra

我在WPF中有一个“无边界”窗口。可以使用以下代码从未处理Click事件的窗口的任何部分拖动它:

// Drag the window:
private void GlassWindow_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton != MouseButton.Left) return;
    if (AllowDrag) DragMove();
}
(注意:在这种情况下AllowDrag始终设置为true)

此代码工作正常,但当我单击窗口并按住鼠标左键时,不移动光标(=不拖动窗口),窗口将冻结约2-3秒(即所有动画暂停,progressbar停止移动)。这种行为是一致的,当我单击按钮或拖动窗口时不会发生,只有当我按住左键单击时才会发生。 是否有任何解决方案,或者这是预期的windows行为

编辑:无法解决问题的内容:

DragMove()
是麻烦制造者,它使用了一种相当老练的方法来实现移动。这导致了您所描述的问题,WPF团队很清楚这个问题,但选择不解决它。你可以在报纸上读到。如果你不高兴就投票

因此,您需要避免
DragMove()
。最好的方法是按照通常的方式来做,这样可以最大限度地降低重现同样问题的风险。这需要了解一些winapi的工作方式。每当单击窗口时,Windows都会发送
WM\u NCHITTEST
消息,询问您的应用程序单击了窗口的哪个部分。当您返回HTCAPTION时,即使您没有标题,Windows也会接受您的文字,并实现您按标题单击和拖动窗口时通常发生的操作

这已经完成,您不必是winapi方面的专家就可以实现。谷歌“wpf wm_nchittest”查找代码。最热门的是一个,Tergiver的代码看起来不错

   if (AllowDrag) DragMove();