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

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

[code]
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;
}
[/code]

위 메소드의 사용법은 이렇게 될 수 있다.
[code]
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...
    }
}
[/code]

2008/03/21 12:09 2008/03/21 12:09
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다