ユーザー コードから が呼び出されたDragMove()
後、ウィンドウのサイズ変更または操作からマウス キャプチャが自動的に解放されないため、アプリケーションがフリーズしているように見えます。Dispatcher.PushFrame()
回避策は、次の呼び出しの前に、マウスをキャプチャしているアプリケーション内の任意のウィンドウから手動でマウス キャプチャを解放することですDispatcher.PushFrame()
。
...
if (priority < DispatcherPriority.Loaded)
{
IntPtr capturingHandle = GetCapture();
for (int i = 0; i < Application.Current.Windows.Count; i++)
{
if (new WindowInteropHelper(
Application.Current.Windows[i]
).Handle == capturingHandle)
{
Mouse.Capture(
Application.Current.Windows[i],
CaptureMode.Element
);
Application.Current.Windows[i].ReleaseMouseCapture();
break;
}
}
}
...
この回避策では、GetCapture()
p/invoke 宣言を利用します。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetCapture();