2013-05-13 4 views
4

마우스 아래에있는 요소를 검색하는 모든 방법은 Visual Hit 테스트와 관련이있는 것으로 보입니다.WPF에서 마우스 아래에 논리 UIElement 얻기

HitTest이 반환하는 현재 시각적 트리를 나타내는 실제 UIElement을 가져올 수있는 메커니즘이 있습니까? 내가 뭘하는지의

요약 :

나는 마우스가 이상하다는 UIElement에 기반으로 뭔가를하고있는에 의존하는 사용자 정의 툴팁 클래스가 있습니다.

간단히 말해서, 소유하는 Window의 PreviewMouseMove 이벤트에 후크하여 "현재 항목"을 업데이트합니다. 이 현재 항목은 마우스가 현재 상단에있는 UIElement을 나타내야합니다.

불행히도 Mouse.DirectlyOver, VisualTreeHelper.HitTest (콜백 포함)으로 만난 모든 것이 작동하지 않습니다.

Windows의 MouseMove 이벤트 내에서 WPF에서 겉으로보기에는 간단한 작업을 수행하는 방법에 대한 통찰력을 제공 할 수 있습니까?

1) 시각적 트리 요소를

2) 테스트를 찾기

var UIElement = Mouse.DirectlyOver as UIElement; 

답변

5

Mouse.DirectlyOver 속성을 사용하여 요소가 논리 트리에있는 경우

3) 해당하는 경우 대답을 찾았습니다.

4) 그렇지 않으면 VisualTreeHelper.GetParent()에 전화를 걸어 알고리즘을 계속 진행해야합니다.

Ps, LogicalTreeHelper.GetParent(your visual tree element) 수도 있습니다.

+1

그래도 여전히 시각적 요소를 가져옵니다. 그래서 예를 들면 ... 기본 템플릿이있는 "Button"을 마우스 오버하려는 경우 텍스트 (내용)의 마우스를 놓으면 특정 텍스트 블록이 나에게 반환됩니다. 기본적으로 개별 시각적 요소와 반대로 Button을 반환하고 싶습니다. – tronious

+0

굉장! 너무 간단합니다. –

2

내가 어떤 명시 적 방법을 모른다, 그러나 아이디어는 매우 간단하다 :

관련 문제