(연관된 글이 1개 있습니다.)
다른 플랫폼에서 해보진 않아서 잘 모르겠습니다만
WPF에서 Mouse 관련 이벤트들이 예상과 다르게 동작하는 것이 있어서 질문드립니다.
예를 들어 Rectangle에 MouseEnter / Leave / Up / Down 이벤트 핸들러를
Preview와 함께 모두 연결했습니다.
그랬을 때 Rectangle을 한 번 클릭하면
Preview Mouse Left Button Down
Preview Mouse Down
Mouse Left Button Down
Mouse Down
Preview Mouse Left Button Up
Preview Mouse Up
Mouse Left Button Up
Mouse Up
뭐 이런 순서로 이벤트가 발생할 거라고 예상 하는데요.
네. 예상대로 잘 발생합니다.
그런데
Rectangle을 Button의 자식. 그러니까 Button의 Content로 넣은 후
다시 클릭하면
Preview Mouse Left Button Down
Preview Mouse Down
Mouse Left Button Down
Mouse Down
Mouse Leave
(이 시점에서 Mouse Up 했습니다.)
Mouse Enter
이렇게 이벤트가 발생합니다.
문제는 Rectangle에 걸어놨던 MouseUp이벤트 들이 하나도 발생하지 않는다는 것이죠.
또 저 MouseLeave가 발생하는 시점에서 Rectangle의 IsMouseOver 값을 확인하면 false가 나옵니다.
Mouse Down 상태에서 MouseLeave 이벤트가 발생한 것도 이상한데
마우스 포인터가 Rectangle을 벗어나지 않았음에도 IsMouseOver가 false로 나오는 것 역시 이해가 잘 안 됩니다.
그런데 더 이상한 건
Rectangle의 PreviewMouse 이벤트 핸들러에서 Break Point를 걸고 다시 테스트 하면
위와 다른, 정상적인 결과 (처음 예상했던 결과)가 나옵니다.
결과가 이상해서 추가한 Button에도 동일하게
PreviewMouseLeftButtonDown, PreviewMouseLeftButtonUp, PreviewMouseDown, PreviewMouseUp, MouseDown, MouseUp, MouseEnter, MouseLeave
그리고 Click 이벤트 핸들러를 연결하고 다시 테스트 해보니
Button의 PreviewMouseLeftButtonDown, PreviewMouseDown, MouseDown 이벤트들이 발생하지 않았습니다.
(물론 Button의 자식으로 들어가 있는 Rectangle은 앞서 언급한 비정상적인 결과와 동일했습니다.)
가장 마지막에 발생한 이벤트는 Click 이벤트였습니다.
제가 WPF의 Mouse 이벤트에 대해 이해를 잘못 하고 있는 건지
원래 이런 건지 잘 모르겠습니다.
당장 필요한 건 MouseUp 이벤트를 받는 건데 어떻게 해야할 지 감이 안 잡힙니다.
혹시나 해서 간단한 테스트 솔루션하나 첨부해볼게요.
확인 부탁드립니다.
[연관 글]
[최초 등록일: ]
[최종 수정일: 7/13/2011]