3

WPF の ListView に何かをドロップしています。ドロップする (X,Y) 位置にあるアイテムを知る必要があります。これどうやってするの?


WPF ListView には GetItemAt がありません。元の問題に戻ります。

4

3 に答える 3

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;
}
于 2008-12-12T17:43:35.163 に答える
5

申し訳ありません。これはうまくいくはずです:

FrameworkElement element = (FrameworkElement)e.OriginalSource;

ListViewItem lvi = (ListViewItem)listView1.ItemContainerGenerator.ContainerFromItem(element.DataContext);
于 2008-12-12T17:45:48.607 に答える
-1

GetItemAt関数を使用します。クライアント座標を操作する必要があるため、GetItemAt の前にPointToClient関数を呼び出す必要がある場合もあります。

于 2008-12-12T13:13:26.253 に答える