1

캔버스에 캔버스와 버튼이 포함 된 usercontrol을 만들었습니다. 나는이 유지되면 또한 캔버스를 이동하고 캔버스를 드래그해야 비즈니스 이유로Mouse가 이미 캡처되었는지 확인하는 방법

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

: 캔버스 위에 버튼을 움직일 수 있으려면 내가 아래에 표시되는 DragBehavior를 부착. 캔버스 여백을 변경하고 끌기에서 마우스 포인터와 함께 움직이는 것처럼 보이게하는 비슷한 Behavior 클래스로이 작업을 수행했습니다. 이 동작은 또한 마우스를 캡처합니다.

이제 문제는 - 버튼을 클릭하고 끌면 Canvas는 마우스 이벤트를 가져오고 끌기를 시작합니다. 어떻게하면 단추를 드래그 할 때 Canvas Behavior가 마우스 이벤트를 얻지 못하게 할 수 있는지 확인할 수 있습니다.

Behaviors에 e.Handled = true를 넣으려고했으나 작동하지 않았습니다.

마우스가 이미 다른 개체를 캡처 한 것을 알 수 있다면 동작을 다시 캡처하지 않도록 조건을 넣을 수 있습니다.

답변

5

테스트 용 Mouse.Captured!= null.

+0

아 .. 그게 간단했습니다. 나는 이것을 찾고 있지만 어떻게 든 놓쳤습니다. 그것은 효과가 있었다. 답장을 보내 주셔서 감사합니다 H.B. –

관련 문제