0

問題

私は2つのListViewを持っています。一方には、他方にドラッグするオプションがあります。これは「フィールド」ListView です。もう 1 つは「ビルダー」ListView です。アイテムが挿入される場所をユーザーに視覚的に示す方法がわかりません。ユーザーを視覚的に支援するために、ListViewItem の間に線を引きたいと思います。

private void builder_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}

private void fields_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}

private void fields_ItemDrag(object sender, ItemDragEventArgs e)
{
    fromBuilder = false;
    fields.DoDragDrop(e.Item, DragDropEffects.Move);
}

private void builder_ItemDrag(object sender, ItemDragEventArgs e)
{
    fromBuilder = true;
    builder.DoDragDrop(e.Item, DragDropEffects.Move);
}

private void builderAndFields_DragDrop(object sender, DragEventArgs e)
{
    ListViewItem i = new ListViewItem();
    i = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;

    // Since this function works for both the builder and the fields,
    // we have to check to see where we are dropping, the sender
    // is the ListView we are dropping onto
    if (sender.Equals(builder))
    {
        ListViewItem c = new ListViewItem();
        c = (ListViewItem)i.Clone();
        Point cp = builder.PointToClient(new Point(e.X, e.Y));
        Console.WriteLine("cp: " + cp);
        ListViewItem dragToItem = builder.GetItemAt(cp.X, cp.Y);
        Console.WriteLine("dragToItem: " + dragToItem);
        int dropIndex = dragToItem.Index;
        // Now, we have to check to see if we are reordering or adding
        // So, we check the flag to see if the dragDrop was initiated 
        // on the builder or on the fields ListView
        if (fromBuilder)
        {
            builder.Items.Insert(dropIndex, c);
            builder.Items.Remove(i);
        }
        else
        {
            Console.WriteLine(dropIndex);
            builder.Items.Insert(dropIndex, c);
        }
    }
    // If the sender is the fields listView, the user is trying to remove
    // the item from the builder.
    else
    {
        builder.Items.Remove(i);
    }
}
4

2 に答える 2

1

PreviewDragEnterPreviewDragOver、およびPreviewDragLeaveを見てください。

そのイベントを使用して、Adorner をドロップ リストに追加できます。「WPF DragDropHelper」を検索すると、いくつかの詳細な例が見つかります。

于 2013-02-01T20:55:28.727 に答える
0

優れた ListViewは、すぐに使用できるドロップ ハイライトと挿入マークをサポートします。

ここに画像の説明を入力

DragOverイベント ハンドラー内のHitTest()メソッドを使用して、通常の ListView でもこれを行うことができると思います。

于 2013-02-16T15:22:45.743 に答える