Как найти, если мышь уже захвачена
Я создал usercontrol, который содержит холст и кнопку на холсте. Чтобы иметь возможность перемещать кнопку по холсту, я добавил DragBehavior, показанный ниже:
class DragOverCanvasBehavior : Behavior<FrameworkElement>
{
private Point _mouseStartPosition;
protected override void OnAttached()
{
AssociatedObject.MouseLeftButtonDown += (sender, e) =>
{
_mouseStartPosition = e.GetPosition((Canvas) AssociatedObject.Parent);
AssociatedObject.CaptureMouse();
};
AssociatedObject.MouseLeftButtonUp += (sender, e) => AssociatedObject.ReleaseMouseCapture();
AssociatedObject.MouseMove += (sender, e) =>
{
var point = e.GetPosition((Canvas)AssociatedObject.Parent) - _mouseStartPosition;
if (AssociatedObject.IsMouseCaptured)
{
Canvas.SetTop(AssociatedObject, point.Y);
Canvas.SetLeft(AssociatedObject, point.X);
}
};
}
}
По деловой причине мне нужно переместить холст также, если я удерживаю и перетаскиваю холст. Я сделал это с помощью аналогичного класса Behavior, который изменяет поля Canvas и выглядит так, как будто он движется вместе с указателем мыши при перетаскивании. Это поведение также захватывает мышь.
Теперь проблема в том, что - если я нажму и перетащу кнопку, Canvas также получит события мыши и начнет перетаскиваться. Как я могу убедиться, что при перетаскивании кнопки Поведение холста не получает событий мыши.
Я попытался поместить e.Handled = true в Поведение, но это не сработало.
Если я могу обнаружить, что Мышь уже захвачена каким-то другим объектом, я могу поставить условие в Поведение, чтобы не захватывать его снова.