如何创建一个支持Drag and Drop的面板?

时间:2016-07-28 11:43:50

标签: c# .net wpf drag-and-drop

假设我们有一个带有Custom元素和空白面板的ListBox。将这些项拖到面板时,它们必须构建在某个逻辑上。例如,如果没有任何面板,则元素位于中间。但如果存在,那么新元素将保持在最接近它的元素附近。因此可以实现?

例如:

enter image description here

1 个答案:

答案 0 :(得分:0)

我通过添加一些排序逻辑修改了this answer工作拖放实现。可以使用CSS样式在视觉上将项目置于中间。

假设:"最接近它"是按字母顺序最接近的。

public object lb_item = null;

private void listBox1_DragLeave(object sender, EventArgs e)
{
    ListBox lb = sender as ListBox;

    lb_item = lb.SelectedItem;
    lb.Items.Remove(lb.SelectedItem);
}

private void listBox1_DragEnter(object sender, DragEventArgs e)
{       
    if (lb_item != null)
    {
        listBox1.Items.Add(lb_item);
        lb_item = null;

        // Here I added the logic:
        // Sort all items added previously 
        // (thereby placing item in the middle).
        listBox1.Sorted = true;
    }
}


private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    lb_item = null;

    if (listBox1.Items.Count == 0)
    {
        return;
    }                

    int index = listBox1.IndexFromPoint(e.X, e.Y);
    string s = listBox1.Items[index].ToString();
    DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All);      
}

private void Form1_DragDrop(object sender, DragEventArgs e)
{            
    lb_item = null;
}