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...
}
}


이 글의 관련글
  • 자바 날짜/시간 계산 예제 코드 :: Java Date Code Snippet (3)
  • WPF 어플리케이션 트레이 아이콘으로 실행하기
  • Flash SEO tool
  • 컴포넌트 시스템과 클래스 로더 경계 :: Java Class Loader
  • Vector에 대한 소고
  • String 타입의 날짜를 Date 타입으로 변환하기
  • 손쉽게 파비콘( favicon.ico )을 만들어 봅시다. (4)
  • LINQPad를 이용하여 LINQ 편집하기 (1)
  • JAVA.UTIL.SCANNER로 텍스트 스캔하기
  • 프로그래머를 위한 스크린 캡처/공유 툴 :: 징 프로젝트 Jing Project (2)
  • Oracle Application Server 설치 후 host, domain, ip변경 방법
  • [STAThread] 어트리뷰트는 뭘 의미하는거지?
  • 2008/03/21 12:09 2008/03/21 12:09
    Trackback Address:http://www.yunsobi.com/blog/trackback/342
    [로그인][오픈아이디란?]