拖放到 DataGrid 项控件(获取当前项索引)
本文关键字:索引 获取 DataGrid 控件 拖放 | 更新日期: 2024-11-07 01:13:42
我在数据网格的每一行都有数据网格模板和一些文本框控件。那么,如何拖放到行上的文本框中呢?
我知道我应该如何以及应该丢弃什么,但我不知道如何获得我应该丢弃的数据网格项的位置。
可以使用
VisualTreeHelper.HitTest
方法和 VisualTreeHelper.GetParent
方法来查明是否在 PreviewDragOver
事件处理程序中的特定DataGridRow
:
private void PreviewDragOver(object sender, DragEventArgs e)
{
HitTestResult hitTestResult =
VisualTreeHelper.HitTest(sender, e.GetPosition(sender));
DataGridRow dataGridRowUnderMouse =
GetParentOfType<DataGridRow>(hitTestResult.VisualHit);
// Do something with dataGridRowUnderMouse
}
private T GetParentOfType<T>(DependencyObject element) where T : DependencyObject
{
Type type = typeof(T);
if (element == null) return null;
DependencyObject parent = VisualTreeHelper.GetParent(element);
if (parent == null && ((FrameworkElement)element).Parent is DependencyObject)
parent = ((FrameworkElement)element).Parent;
if (parent == null) return null;
else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type))
return parent as T;
return GetParentOfType<T>(parent);
}