gpt4 book ai didi

c# - WPF C# : Rearrange items in listbox via drag and drop

转载 作者:IT王子 更新时间:2023-10-29 03:47:24 26 4
gpt4 key购买 nike

我想弄清楚如何通过鼠标拖动上下移动预填充列表框中的项目。

我已经查看了 Microsoft 的 api 中的 Control.DoDragDrop 方法,但我仍然无法让它执行任何操作。

由于我是 Visual Studio 环境的新手,所以我将不胜感激。

最佳答案

我试过使用 ObservableCollection 创建一个。看看。

    ObservableCollection<Emp> _empList = new ObservableCollection<Emp>();

public Window1()
{
InitializeComponent();

_empList .Add(new Emp("1", 22));
_empList .Add(new Emp("2", 18));
_empList .Add(new Emp("3", 29));
_empList .Add(new Emp("4", 9));
_empList .Add(new Emp("5", 29));
_empList .Add(new Emp("6", 9));
listbox1.DisplayMemberPath = "Name";
listbox1.ItemsSource = _empList;

Style itemContainerStyle = new Style(typeof(ListBoxItem));
itemContainerStyle.Setters.Add(new Setter(ListBoxItem.AllowDropProperty, true));
itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(s_PreviewMouseLeftButtonDown)));
itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.DropEvent, new DragEventHandler(listbox1_Drop)));
listbox1.ItemContainerStyle = itemContainerStyle;
}

拖放过程:

    void s_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

if (sender is ListBoxItem)
{
ListBoxItem draggedItem = sender as ListBoxItem;
DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);
draggedItem.IsSelected = true;
}
}

void listbox1_Drop(object sender, DragEventArgs e)
{
Emp droppedData = e.Data.GetData(typeof(Emp)) as Emp;
Emp target = ((ListBoxItem)(sender)).DataContext as Emp;

int removedIdx = listbox1.Items.IndexOf(droppedData);
int targetIdx = listbox1.Items.IndexOf(target);

if (removedIdx < targetIdx)
{
_empList.Insert(targetIdx + 1, droppedData);
_empList.RemoveAt(removedIdx);
}
else
{
int remIdx = removedIdx+1;
if (_empList.Count + 1 > remIdx)
{
_empList.Insert(targetIdx, droppedData);
_empList.RemoveAt(remIdx);
}
}
}

注意:

  • 此实现中的一个问题是,由于它使用了 PreviewMouseLeftButtonDown 事件,因此拖动的项目看起来不像是选中的项目。
  • 而且为了更容易实现,放置目标是列表框项目而不是列表框本身 - 可能需要更好的解决方案。

关于c# - WPF C# : Rearrange items in listbox via drag and drop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com