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

时间:2015-03-10 08:49:23

标签: c# wpf datagrid drag-and-drop

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

我知道如何以及我应该放弃什么,但我不知道如何获取我应该删除的datagrid项目的位置。

1 个答案:

答案 0 :(得分:1)

您可以使用VisualTreeHelper.HitTest methodVisualTreeHelper.GetParent method来了解您是否已超过DataGridRow事件处理程序中的特定PreviewDragOver

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