C# 如果按住鼠标左键而不移动光标,则Window.DragMove()会导致窗口暂时冻结
我在WPF中有一个“无边界”窗口。可以使用以下代码从未处理Click事件的窗口的任何部分拖动它: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
// 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();