WPF:将虚拟文件拖放到Windows资源管理器中
我正在开发一个类似于dropbox的应用程序,我在WPF列表视图中显示远程文件。 我想拖动这些元素并将其放入Windows资源管理器中。 我见过这样的代码:
var dataObject = new DataObject(DataFormats.FileDrop, files.ToArray()); dataObject.SetData(DataFormats.StringFormat, dataObject); DoDragDrop(dataObject, DragDropEffects.Copy);
但是你可能认为,那些文件还没有在本地系统上,在复制它们之前我需要连接到服务器,下载并解压缩文件。 就像一个ftp客户端一样。
我不知道怎么做,但我想知道是否有任何“掉落”事件或类似我能处理。
谢谢!
这个片段:
var virtualFileDataObject = new VirtualFileDataObject( // BeginInvoke ensures UI operations happen on the right thread (vfdo) => Dispatcher.BeginInvoke((Action)(() => BusyScreen.Visibility = Visibility.Visible)), (vfdo) => Dispatcher.BeginInvoke((Action)(() => BusyScreen.Visibility = Visibility.Collapsed))); // Provide a virtual file (downloaded on demand), its URL, and descriptive text virtualFileDataObject.SetData(new VirtualFileDataObject.FileDescriptor[] { new VirtualFileDataObject.FileDescriptor { Name = "DelaysBlog.xml", StreamContents = stream => { using(var webClient = new WebClient()) { var data = webClient.DownloadData("https://blogs.msdn.com/delay/rss.xml"); stream.Write(data, 0, data.Length); } } }, }); virtualFileDataObject.SetData( (short)(DataFormats.GetDataFormat(CFSTR_INETURLA).Id), Encoding.Default.GetBytes("https://blogs.msdn.com/delay/rss.xml ")); virtualFileDataObject.SetData( (short)(DataFormats.GetDataFormat(DataFormats.Text).Id), Encoding.Default.GetBytes("[The RSS feed for Delay's Blog] ")); DoDragDropOrClipboardSetDataObject(e.ChangedButton, TextUrl, virtualFileDataObject, DragDropEffects.Copy);
使用链接的类应该工作。 。 非常好,简单的解决方案。
https://pavanpodila.spaces.live.com/blog/cns!9C9E888164859398!190.entry https://pavanpodila.spaces.live.com/blog/cns!9C9E888164859398!199.entry http://pavanpodila.spaces。 live.com/blog/cns!9C9E888164859398!225.entry
看到这一系列文章。 这应该可以帮助您入门。
编辑:看看这个dragsourceadvisor的实现
上述就是C#学习教程:WPF:将虚拟文件拖放到Windows资源管理器中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
internal class ImagesViewPanelDragSourceAdvisor : IDragSourceAdvisor { private FrameworkElement _dragSource; public DependencyObject DragSource { get { return _dragSource; } set { _dragSource = value as FrameworkElement; } } public DependencyObject DragObject { get; set; } public DragDropEffects GetDragDropEffects() { DragDropEffects effects = DragDropEffects.None; FrameworkElement frameworkObj = DragObject as FrameworkElement; if (frameworkObj != null && frameworkObj.DataContext is ImageViewModel) { effects = DragDropEffects.Copy; } return effects; } public IDataObject GetDragDataObject() { Debug.Assert(GetDragDropEffects() != DragDropEffects.None); ImagesViewModel imagesVM = (FrameworkElement)DragSource).DataContext as ImagesViewModel; StringCollection fileList = new StringCollection(); foreach (ImageViewModel imageVM in imagesVM.Items.Where(imageVM => imageVM.IsSelected)) { fileList.Add(imageVM.ImagePath); } Debug.Assert(fileList.Count > 0); DataObject dataObj = new DataObject(); dataObj.SetFileDropList(fileList); return dataObj; } public void FinishDrag(DragDropEffects finalEffect) { }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004647.html