В любом случае: я возился с этим кодом и, наконец, заставил его работать в соответствии с моими потребностями:
private async void MyListView_Drop(object sender, DragEventArgs e)
{
var scrollViewer = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(MyListView, 0), 0) as ScrollViewer;
var position = e.GetPosition((ListView)sender);
var positionY = scrollViewer.VerticalOffset + position.Y;
var index = GetItemIndex(positionY, MyListView);
// do something useful with the index...
}
int GetItemIndex(double positionY, ListView targetListView)
{
var index = 0;
double height = 0;
foreach (var item in targetListView.Items)
{
height += GetRowHeight(item, targetListView);
if (height > positionY) return index;
index++;
}
return index;
}
double GetRowHeight(object listItem, ListView targetListView)
{
var listItemContainer = targetListView.ContainerFromItem(listItem) as ListViewItem;
var height = listItemContainer.ActualHeight;
var marginTop = listItemContainer.Margin.Top;
return marginTop + height;
}
Спасибо, что указали мне в правильном направлении!