Ответ 1
Приложение кажется замороженным, потому что захват мыши не будет автоматически освобожден от изменения размера окна или операции 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();