2010-07-12 3 views
0

WPF에 UserControl이 있습니다. UserControl에는 MouseLeftMouseButtonUp 이벤트가 있습니다. 문제는 - Window가 MouseDown 이벤트에 this.DragMove() 메서드가있어서 사용자 정의 컨트롤에서 MouseLeftMouseButtonUp을 방해하는 것입니다. 경계선없는 윈도우를 이동하려면 this.DragMove() 메서드가 필요합니다. 아이디어가 있으십니까? 감사합니다.this.dragmove() mouseup 이벤트 wpf와의 간섭

+0

당신이 더 구체적으로 수 다음 MouseDown가 이미 처리 된 경우 귀하의 Window_MouseDown 이벤트는 그래서 당신은 당신의 컨트롤의 마우스 이벤트 방해 DragMove을 방지하기 위해해야 ​​할 일은이 코드를 추가하고, 실행되지 않습니다? 그것은 정확히 어떻게 간섭합니까? –

+0

Window의 MouseDown 이벤트에서 dragmove 메서드를 호출하면 사용자 정의 컨트롤을 클릭하면 MouseLeftButtonUp 이벤트가 발생하지 않습니다. 그러나 DragLove 메서드를 호출하지 않으면 MouseLeftButtonUp 이벤트가 제대로 작동합니다. – amitairos

답변

3

DragMove은 동기 호출입니다. 사용자가 창 이동을 마칠 때까지 차단됩니다. 즉, DragMove이 반환되면 왼쪽 버튼이 위로입니다. DragMove() 전화가 오면 즉시 코드를 추가하면됩니다.

+0

그러나 DragMove 호출은 Window_MouseDown 이벤트에 있으며 실행하려는 코드는 UserControl_MouseLeftButtonUp 이벤트에 있습니다. DragMove 뒤에 코드를 추가하면 userControl을 클릭 할 때만 실행됩니다. – amitairos

+0

UserControl을 클릭하면, 윈도우를 움직이지 않아도 매번 MouseDown을 시작하게됩니다. DragMove는 마우스 버튼을 놓은 후에 반환됩니다 (MouseUp). "클릭 할 때만 실행됩니다"라는 말은 실제로 "창을 이동하지 않을 때만 실행"을 의미합니까? 그렇다면 DragMove를 호출하기 전과 후에 창 위치를 저장할 수 있습니다. 창이 움직이지 않으면 코드를 실행하십시오. –

+0

예,하지만 MouseUp 이벤트가 전혀 트리거되지 않습니다. – amitairos

0

나는 이와 같은 문제가 있었고 mousebutton 이벤트 대신 click 이벤트를 사용하여 dragmove가 실행되는 것을 발견했습니다. 제 수정을 위해 버튼 레이블을 교체해야했습니다. 사용자 콘트롤에 다른 요소를 서브 클래스 화하여 사용할 클릭 이벤트를 선택할 수도 있습니다.

2

동일한 문제가 발생했지만 답변을 찾았습니다.

Private Sub YourControl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles YourControl.MouseDown 
    e.Handled = True 
End Sub 
관련 문제