События мыши для захваченного элемента перестают срабатывать при перетаскивании

У меня есть код, который рисует некоторые точки на экране, а затем позволяет перетаскивать их, удерживая левую кнопку мыши. Это работает, за исключением случаев, когда события мыши перестают срабатывать, а перетаскиваемая точка перестает двигаться.

Поскольку все события перестают быть перехвачены (по неизвестной причине), это означает, что пользователь может отпустить левую кнопку мыши без каких-либо событий.

Странно то, что пользователь может затем переместить мышь над точкой, и он снова начнет перетаскивать, не удерживая левую кнопку мыши нажатой. Это делает для очень плохого пользовательского опыта.

Что здесь происходит?

pinPoint.MouseLeftButtonDown += Point_MouseLeftButtonDown;
pinPoint.MouseLeftButtonUp += Point_MouseLeftButtonUp;
pinPoint.MouseMove += Point_MouseMove;

.
.
.

void Point_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    ((UIElement)sender).CaptureMouse();
    if (_isDragging == false)
    {
        _isDragging = true;
    }
}

void Point_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    _isDragging = false;
    ((UIElement)sender).ReleaseMouseCapture();
}

void Point_MouseMove(object sender, MouseEventArgs e)
{
    //where the point gets moved and some other logic
    //possibly this logic takes too long?
}

1 ответ

Решение

Я нашел решение, которое работает. Я до сих пор не понимаю, почему он постоянно теряет MouseCapture.

pinPoint.LostMouseCapture += Point_LostMouseCapture;

.
.
.

void Point_LostMouseCapture(object sender, MouseEventArgs e)
{
    //if we lost the capture but we are still dragging then just recapture it
    if (_isDragging)
    {
        ((UIElement)sender).CaptureMouse();
    }
}
Другие вопросы по тегам