【发布时间】:2015-12-19 22:35:29
【问题描述】:
我正在尝试拖动 ListView 项目并将其作为文件副本从该 ListView 项目中存储的位置拖放。当我开始拖动时,我成功地从 ListView 项目中获取了位置,但无法通知操作系统将该文件复制到指定位置。
private Point start;
ListView dragSource = null;
private void files_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.start = e.GetPosition(null);
ListView parent = (ListView)sender;
dragSource = parent;
object data = GetDataFromListBox(dragSource, e.GetPosition(parent));
Hide();
if (data != null)
{
string dataStr = ((UserData)data).Data.ToString();
string filepath = new System.IO.FileInfo(dataStr).FullName;
DataObject fileDrop = new DataObject(DataFormats.FileDrop, filepath);
DragDrop.DoDragDrop((ListView)sender, fileDrop, DragDropEffects.Copy);
}
}
private static object GetDataFromListBox(ListView source, Point point)
{
UIElement element = source.InputHitTest(point) as UIElement;
if (element != null)
{
object data = DependencyProperty.UnsetValue;
while (data == DependencyProperty.UnsetValue)
{
data = source.ItemContainerGenerator.ItemFromContainer(element);
if (data == DependencyProperty.UnsetValue)
{
element = VisualTreeHelper.GetParent(element) as UIElement;
}
if (element == source)
{
return null;
}
}
if (data != DependencyProperty.UnsetValue)
{
return data;
}
}
return null;
}
第二种方法GetDataFromListBox() 我在其中一个 SO 问题的答案中找到。此方法从ListBox 或ListView 中提取正确的数据。
我是 WPF 新手。请告诉我我错过了什么?
【问题讨论】:
标签: c# .net wpf listview mouseevent