我在datagrid的每一行都有datagrid模板和一些文本框控件。 那么,如何拖放到行上的文本框?
我知道如何以及我应该放弃什么,但我不知道如何获取我应该删除的datagrid项目的位置。
答案 0 :(得分:1)
您可以使用VisualTreeHelper.HitTest
method和VisualTreeHelper.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);
}