wpf中的列表框dragdrop
我目前正在将windows窗体应用程序移植到wpf。有一个包含文件名的列表框。应该可以将(多个)项拖动到windows资源管理器。 这在旧的windows窗体中很容易实现,但我找不到一种在wpf中实现的方法 这是我在windows窗体中使用的代码:wpf中的列表框dragdrop,wpf,listview,drag-and-drop,Wpf,Listview,Drag And Drop,我目前正在将windows窗体应用程序移植到wpf。有一个包含文件名的列表框。应该可以将(多个)项拖动到windows资源管理器。 这在旧的windows窗体中很容易实现,但我找不到一种在wpf中实现的方法 这是我在windows窗体中使用的代码: void listView1_ItemDrag(object sender, ItemDragEventArgs e) { string[] files = GetSelection(); if (files != null)
void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
string[] files = GetSelection();
if (files != null)
{
DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy );
}
}
确保选中了多选选项(复选框)尝试查看Bea Stollnitz的博客,以全面实现WPF中的拖放功能
好的。。。我找到了解决问题的方法,基于:
试试这段代码,它可以帮助你解决问题
公共部分类主窗口:窗口
{
列表文件=新列表();
公共主窗口()
{
初始化组件();
添加(@“D:\file1.txt”);
添加(@“D:\folder1”);
添加(@“D:\folder2”);
添加(@“D:\folder3”);
lstest.DataContext=文件;
}
私人点启动;
私有void lstest_PreviewMouseLeftButtonDown(对象发送器,鼠标按钮ventargs e)
{
this.start=e.GetPosition(null);
}
私有void lstest_MouseMove(对象发送方,MouseEventArgs e)
{
点mpos=e.GetPosition(空);
向量差异=this.start-mpos;
如果(e.LeftButton==鼠标按钮状态按下和数学Abs(diff.X)>系统参数最小水平牵引距离和数学Abs(diff.Y)>系统参数最小垂直牵引距离)
{
如果(this.lstest.SelectedItems.Count==0)
{
返回;
}
string[]Files=新字符串[file.Count];
for(int i=0;i
多选不是问题,代码obove显示了我在WIN表单中进行拖放的方式,我想知道这是如何与WPF一起工作的
private void List_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Store the mouse position
startPoint = e.GetPosition(null);
}
private void List_MouseMove(object sender, MouseEventArgs e)
{
// Get the current mouse position
Point mousePos = e.GetPosition(null);
Vector diff = startPoint - mousePos;
if (e.LeftButton == MouseButtonState.Pressed &&
Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
{
if (listView1.SelectedItems.Count == 0)
{
return;
}
string[] files = GetSelection();
string dataFormat = DataFormats.FileDrop;
DataObject dataObject = new DataObject(dataFormat, files);
DragDrop.DoDragDrop(listView1, dataObject, DragDropEffects.Copy);
}
}
try this code that help u to solve your problem
public partial class MainWindow : Window
{
List<string> file = new List<string>();
public MainWindow()
{
InitializeComponent();
file.Add(@"D:\file1.txt");
file.Add(@"D:\folder1");
file.Add(@"D:\folder2");
file.Add(@"D:\folder3");
lstTest.DataContext = file;
}
private Point start;
private void lstTest_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.start = e.GetPosition(null);
}
private void lstTest_MouseMove(object sender, MouseEventArgs e)
{
Point mpos = e.GetPosition(null);
Vector diff = this.start - mpos;
if (e.LeftButton == MouseButtonState.Pressed && Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance && Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
{
if (this.lstTest.SelectedItems.Count == 0)
{
return;
}
string[] Files = new string[file.Count] ;
for (int i = 0; i < file.Count; i++)
{
Files[i] = file[i];
}
string dataFormat = DataFormats.FileDrop;
DataObject dataObject = new DataObject(dataFormat, (lstTest.SelectedItems.Cast<string>()).ToArray<string>());
DragDrop.DoDragDrop(this, dataObject, DragDropEffects.Copy);
}
}
}