2014-05-21 4 views
5

UIElement 클래스는 RoutedEvent 구성원 MouseLeftButtonDownEventMouseLeftButtonUpEvent - 정적을 정의하지만 MouseMoveEvent은 없습니다. 제가 알 수있는 한, 프레임 워크 계층에서 어떤 클래스도 않습니다.MouseMoveEvent가없는 이유 - 또는 마우스 이동 이벤트에 AddHandler를 사용하는 방법

public event MouseEventHandler MouseMove; 

그래서 당신이 쓸 수 있습니다 :이 정규 이벤트 정의입니다

void AttachHandler(UIElement element) 
{ 
    element.MouseMove += OnMouseMove; 
} 

하지만 당신은 당신도 처리 이벤트를 구독 할 수있는 다른 형태의, 사용할 수 없습니다

void AttachHandler(UIElement element) 
{ 
    element.AddHandler(UIElement.MouseMoveEvent, new MouseEventHandler(OnMouseMove), true); 
} 

그래서 제 질문은 두 가지이다 :

  1. 어디에도 정의 된 MouseMoveEvent이없는 이유는 무엇입니까?
  2. MouseMove 이벤트를 처리 할 때 알림을받을 수있는 해결 방법이 있습니까?

    이 기술의 한계는 AddHandler에 API는 문제의 라우트 된 이벤트를 식별 형 RoutedEvent의 매개 변수를 사용한다는 것입니다 :

편집은

나는 the MSDN docs acknowledge this as a limitation 것을 알 수있다. 모든 Silverlight 라우팅 이벤트가 RoutedEvent 식별자를 제공하는 것은 아니므로이 고려 사항은 라우팅 된 이벤트가 처리 된 경우에도 처리 될 수있는 영향을 미칩니다.

편집 # 2

당 @HansPassant는 일반적인 대답은 "처리"로 "MouseMove 이벤트"이벤트는, 따라서 그들은 항상 거품을 표시 할 수 없다는 것입니다. TextBox의 텍스트 영역을 클릭하면 끌어서 놓기 동작을 활성화하면 "MouseMove"이벤트가 더 이상 트리거되지 않습니다. 왜 그렇게 될지 모르겠다.


- 나는 사용자가/끌어 텍스트 상자를 드롭 할 수있는 행동을 쓰기 위해 노력하고 있어요 - 사람이 궁금합니다. TextBox 컨트롤은 텍스트 선택을 허용하기 위해 기본적으로 마우스 이벤트를 가로 챕니다.

+1

'UIElement.PreviewMouseMoveEvent'를 사용할 수 있습니다. –

+0

@HamletHakobyan 잘, 실버 라이트에도 존재하지 않습니다. Silverlight에는없는 기능 중 하나 일뿐입니다. 나는 여전히 최선의 해결 방법이 무엇인지 알고 싶다. – McGarnagle

+0

예, 태그가 누락되었습니다. –

답변

3

하면 명시 적으로 MSDN article에서 언급 한 :

더는 이벤트 데이터에서 처리가 없기 때문에 MouseMove 이벤트는

는 그래서 귀하의 질문에 대답 AddHandler에 사용할 수 없습니다 :

어디서도 MouseMoveEvent가 정의되어 있지 않은 이유는 무엇입니까?

아무 것도 필요하지 않으므로.

처리되는 경우에도 MouseMove 이벤트에 대한 알림을받을 수있는 해결 방법이 있습니까?

당신이 필요하지 않습니다, 그들은 처리 할 수 ​​없으며 항상 거품. Window의 MouseMove 이벤트 핸들러에서이를 볼 수 있습니다.

+0

아, 감사합니다. 텍스트 선택 드래그가 활성화 된 경우를 제외하고는 "항상 거품이납니다."사실입니다. 즉, 마우스 왼쪽 버튼이 눌러져있는 동안 MouseMove 이벤트가 튀어 나오지 않습니다. 분명히 엣지 케이스가 ... 왜 그런 일이 일어나는지, 아니면 버그인지 분명하지 않습니다. – McGarnagle