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);
 });

Захват будет после последствий макета.

Другие вопросы по тегам