Как найти, если мышь уже захвачена - PullRequest
1 голос
/ 26 августа 2011

Я создал пользовательский элемент управления, который содержит холст и кнопку на холсте. Чтобы иметь возможность перемещать кнопку по холсту, я добавил 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 в Поведение, но это не сработало.

Если я смогу узнать, что Мышь уже захвачена каким-то другим объектом, я могу поставить условие в Поведение, чтобы не захватывать его снова.

1 Ответ

5 голосов
/ 27 августа 2011

Тест для Mouse.Captured!= null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...