캔버스에 캔버스와 버튼이 포함 된 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를 넣으려고했으나 작동하지 않았습니다.
마우스가 이미 다른 개체를 캡처 한 것을 알 수 있다면 동작을 다시 캡처하지 않도록 조건을 넣을 수 있습니다.
아 .. 그게 간단했습니다. 나는 이것을 찾고 있지만 어떻게 든 놓쳤습니다. 그것은 효과가 있었다. 답장을 보내 주셔서 감사합니다 H.B. –