HitTest를 통한 마우스 아래의 컨트롤 구하기

WPF 어플리케이션이든 아니든 마우스가 위치한 곳의 컨트롤을 알아야 할 때가 종종 있다.
다른 방식으로도 마우스 아래에 있는 컨트롤을 알아낼 수 있지만 WPF라면 아래와 같이 VisualTreeHelper클래스의
HitTest를 이용해서 컨트롤을 얻어오는 방법도 있다.


T GetItemAtLocation(Point location)
{
T foundItem = default(T);
HitTestResult hitTestResults = VisualTreeHelper.HitTest(treeView,location);

if(hitTestResults.VisualHit is FrameworkElement)
{
object dataObject = (hitTestResults.VisualHit as
FrameworkElement).DataContext;

if(dataObject is T)
{
foundItem = (T)dataObject;
}
}

return foundItem;
}



위 메소드의 사용법은 이렇게 될 수 있다.

void treeView_Drop(object sender,DragEventArgs e)
{
if(e.Data.GetDataPresent(typeof(Task)))
{
Task sourceTask = (Task)e.Data.GetData(typeof(Task));
Task targetTask = GetItemAtLocation(MouseUtilities.GetMousePosition());

// Code to move the item in the model is placed here...
}
}


이 글의 관련글
  • Flash SEO tool
  • WPF에서 비디오 재생하는 두가지 방법 :: Media Player on WPF
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • 소켓통신 서버/클라이언트 통신시 IO Blocking 상태에 빠지는 코드와 해결 방안
  • 넷빈즈 6.0 코드 템플릿 사용하기 :: NetBeans 6.0 Code Template
  • 넷빈즈(NetBeans) 메뉴의 폰트를 깔끔하게 해보자
  • 자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j (2)
  • java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환
  • 윈도우즈 블루스크린 코드 일람:: Windows BlueScreen Code
  • 2008/03/21 12:09 2008/03/21 12:09
    Trackback Address:http://www.yunsobi.com/blog/trackback/342
    [로그인][오픈아이디란?]