Как я могу получить элемент ListView из позиции (X, Y)?

Я бросаю что-то в ListView в WPF. Мне нужно знать предмет в (X, Y) позиции, которую я бросаю. Как я могу это сделать?


WPF ListView не имеет GetItemAt. Я возвращаюсь к своей первоначальной проблеме.

12.12.2008 13:05:07
3 ОТВЕТА

Вы хотите использовать функцию GetItemAt . Вам также может понадобиться вызвать функцию PointToClient перед GetItemAt, поскольку вам нужно работать с клиентскими координатами .

-1
12.12.2008 13:13:26
WPF ListView не имеет GetItemAt. Я возвращаюсь к своей первоначальной проблеме.
Mariano 12.12.2008 13:41:10
Я воздаю вам должное, потому что этот ответ возник, когда я на самом деле искал вопрос, связанный с winforms. Спасибо за помощь, хотя вы были не по теме.
Christopher Painter 30.07.2010 17:13:18
РЕШЕНИЕ

Выполнено! Благодаря этой статье 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;
}
5
12.12.2008 17:43:35

Обручи, прости. Это должно работать нормально:

FrameworkElement element = (FrameworkElement)e.OriginalSource;

ListViewItem lvi = (ListViewItem)listView1.ItemContainerGenerator.ContainerFromItem(element.DataContext);
5
28.05.2012 16:53:48