如何从(X,Y)位置获取ListView项?

时间:2008-12-12 13:05:07

标签: wpf listview

我在WPF中的ListView中删除了一些内容。我需要知道我正在放弃的(X,Y)位置的项目。我怎么能这样做?


WPF ListView没有GetItemAt。我回到原来的问题。

3 个答案:

答案 0 :(得分:5)

完成!感谢这篇文章 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;
}

答案 1 :(得分:5)

篮球,对不起。这应该可以正常工作:

FrameworkElement element = (FrameworkElement)e.OriginalSource;

ListViewItem lvi = (ListViewItem)listView1.ItemContainerGenerator.ContainerFromItem(element.DataContext);

答案 2 :(得分:0)

您想使用GetItemAt功能。您可能还需要在GetItemAt之前调用PointToClient函数,因为您需要使用client coordinates