C# 拖放WPF存在问题。当ListBoxItem保留空白字段时拖动按钮

C# 拖放WPF存在问题。当ListBoxItem保留空白字段时拖动按钮,c#,wpf,drag-and-drop,listbox,listboxitem,C#,Wpf,Drag And Drop,Listbox,Listboxitem,在两个列表框之间拖动项目时出现问题。虽然拖动项是ListBoxItem,但拖动按钮会留下空白字段 我试着检查拖拽物品的类型,但我是WPF的新手,不知道如何修复它 这是我的mainWindow.xaml.cs文件 private const string formatLista=“Format\u Lista”; private const string formatElement=“Format_Element”; 私有无效列表框\u预览鼠标左键向下(对象发送器,鼠标按钮ventargs e)

在两个列表框之间拖动项目时出现问题。虽然拖动项是ListBoxItem,但拖动按钮会留下空白字段

我试着检查拖拽物品的类型,但我是WPF的新手,不知道如何修复它

这是我的mainWindow.xaml.cs文件

private const string formatLista=“Format\u Lista”;
private const string formatElement=“Format_Element”;
私有无效列表框\u预览鼠标左键向下(对象发送器,鼠标按钮ventargs e)
{
ListBox lbSender=作为ListBox的发送者;
ListBoxItem元素=lbSender.GetItemAt(e.GetPosition(lbSender));
if(element==null)返回;
var item=visualtreeheloper.HitTest(lbSender,e.GetPosition(lbSender)).VisualHit;
DataObject dane=新的DataObject();
丹麦SetData(formatLista,lbSender);
设置数据(formatElement,element);
DragDrop.DoDragDrop(lbSender,dane,DragDropEffects.Move | DragDropEffects.Copy);
}
私有无效列表框\u DragEnter(对象发送方,DragEventArgs e)
{
if(例如KeyStates.HasFlag(DragDropKeyStates.ControlKey))
e、 效果=DragDropEffects.Copy;
否则e.Effects=DragDropEffects.Move;
}
私有无效列表框(对象发送方,DragEventArgs e)
{
ListBox lbSender=作为ListBox的发送者;
ListBox lbŹródło=e.Data.GetData(formatLista)作为ListBox;
ListBoxItem元素=e.Data.GetData(formatElement)作为ListBoxItem;
if(例如KeyStates.HasFlag(DragDropKeyStates.ControlKey))
{
element=newlistboxitem(){Content=element.Content};
}
else lbŹródło.项目。移除(元素);
lbSender.Items.Add(元素);
}
上面的代码中使用了GetitemAt类

公共静态类ListBoxExtensions
{
公共静态ListBoxItem GetItemAt(此ListBox ListBox,点位置)
{
var item=VisualTreeHelper.HitTest(列表框,位置).VisualHit;
while(item!=null&!(item为ListBoxItem))
{
item=VisualTreeHelper.GetParent(项目);
}
将项目作为ListBoxItem返回;
}
}
这里是xaml代码:



我需要在listbox和listboxitem之间拖动按钮

我认为您应该首先将每个
按钮
包装在一个
listboxitem
中,如下所示: