Я сбрасываю что-то в ListView в WPF. Мне нужно знать предмет в (X, Y) позиции, которую я бросаю. Как я могу это сделать?
WPF ListView не имеет GetItemAt. Я возвращаюсь к своей первоначальной проблеме.
Готово! Благодаря этой статье http://www.codeproject.com/KB/WPF/WPF_Drag_And_Drop_Sample.aspx
private int GetCurrentIndex(GetPositionDelegate getPosition) { int index = -1; for (int i = 0; i < clasesListView.Items.Count; ++i) { ListViewItem item = GetListViewItem(i); if (this.IsMouseOverTarget(item, getPosition)) { index = i; break; } } return index; } private bool IsMouseOverTarget(Visual target, GetPositionDelegate getPosition) { Rect bounds = VisualTreeHelper.GetDescendantBounds(target); Point mousePos = getPosition((IInputElement)target); return bounds.Contains(mousePos); } delegate Point GetPositionDelegate(IInputElement element); ListViewItem GetListViewItem(int index) { if (clasesListView.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) return null; return clasesListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; }
Обручи, прости. Это должно работать нормально:
FrameworkElement element = (FrameworkElement)e.OriginalSource; ListViewItem lvi = (ListViewItem)listView1.ItemContainerGenerator.ContainerFromItem(element.DataContext);
Вы хотите использовать функцию GetItemAt . Вам также может понадобиться вызвать функцию PointToClient перед GetItemAt, поскольку вам нужно работать с клиентскими координатами .