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]