События мыши для захваченного элемента перестают срабатывать при перетаскивании
У меня есть код, который рисует некоторые точки на экране, а затем позволяет перетаскивать их, удерживая левую кнопку мыши. Это работает, за исключением случаев, когда события мыши перестают срабатывать, а перетаскиваемая точка перестает двигаться.
Поскольку все события перестают быть перехвачены (по неизвестной причине), это означает, что пользователь может отпустить левую кнопку мыши без каких-либо событий.
Странно то, что пользователь может затем переместить мышь над точкой, и он снова начнет перетаскивать, не удерживая левую кнопку мыши нажатой. Это делает для очень плохого пользовательского опыта.
Что здесь происходит?
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();
}
}