我正在 WPF ListBoxes 之间执行拖放操作,我希望能够将其插入到集合中被拖放的位置而不是列表末尾。
有谁知道类似于 WinForms ListBox IndexFromPoint 函数的解决方案?
我最终通过使用 DragDropEvent.GetPosition、VisualTreeHelper.GetDescendantBounds 和 Rect.Contains 的组合来完成这项工作。这是我想出的:
int index = -1;
for (int i = 0; i < collection.Count; i++)
{
var lbi = listBox.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
if (lbi == null) continue;
if (IsMouseOverTarget(lbi, e.GetPosition((IInputElement)lbi)))
{
index = i;
break;
}
}
该代码驻留在 ListBox Drop 事件中。 e 对象是传递到 Drop 事件的 DragEventArgs 对象。
IsMouseOverTarget 的实现是:
private static bool IsMouseOverTarget(Visual target, Point point)
{
var bounds = VisualTreeHelper.GetDescendantBounds(target);
return bounds.Contains(point);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)