wpf mousecapture немедленно освобождается силой
Я создаю пользовательский элемент управления, который включает всплывающую панель.
Когда я нажимаю кнопку, чтобы открыть панель, я пытаюсь захватить мышь, чтобы я мог определить, щелкает ли пользователь с всплывающей панели, чтобы я мог закрыть ее.
Но сразу после захвата мыши, я получаю событие потерянного захвата мыши и не могу обнаружить щелчки за пределами панели.
вот где я обнаруживаю прямую открытую закрыть щелчок
private void Grid_MouseUP(object sender, MouseButtonEventArgs e)
{
if (indicatorVM != null)
{
if (indicatorVM.SettingsFlyoutVisibility == Visibility.Collapsed)
{
doRelease = false;
indicatorVM.SettingsFlyoutVisibility = Visibility.Visible;
bool result = this.CaptureMouse();
result = Mouse.Capture(this, CaptureMode.SubTree);
}
else
{
doRelease = true;
indicatorVM.SettingsFlyoutVisibility = Visibility.Collapsed;
this.ReleaseMouseCapture();
}
}
}
Если я подключусь к событию "Утерянный захват", он срабатывает сразу после открытия всплывающего окна. Когда я проверяю переменную результата, независимо от того, как я перехватываю мышь, результат равен true, поэтому кажется, что он работает правильно.
Есть идеи?
1 ответ
Во-первых, попробуйте UpdateLayout сразу после установки параметра visibleVM видимости Visible, прежде чем захватывать мышь. Это позволит избежать изменения макета после захвата мыши, что, вероятно, является тем, что крадет захват у вас. Мое второе предложение - немного отложить захват с помощью Dispatcher Invoke, например так:
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
{
bool result = this.CaptureMouse();
result = Mouse.Capture(this, CaptureMode.SubTree);
});
Захват будет после последствий макета.