拖放到 DataGrid 项控件(获取当前项索引)

本文关键字:索引 获取 DataGrid 控件 拖放 | 更新日期: 2024-11-07 01:13:42

我在数据网格的每一行都有数据网格模板和一些文本框控件。那么,如何拖放到行上的文本框中呢?

我知道我应该如何以及应该丢弃什么,但我不知道如何获得我应该丢弃的数据网格项的位置。

拖放到 DataGrid 项控件(获取当前项索引)

可以使用

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);
}