WPF: Drag and drop virtual files into Windows explorer

后端 未结 2 942
孤街浪徒
孤街浪徒 2021-01-02 14:33

I\'m developing an application similar to dropbox and i show the remote files on a WPF listview. I want to drag those elements and drop it into windows explorer. I\'ve seen

2条回答
  •  悲&欢浪女
    2021-01-02 15:22

    This snippet:

    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("http://blogs.msdn.com/delay/rss.xml");
                                    stream.Write(data, 0, data.Length);
                                }
                            }
                    },
                });
                virtualFileDataObject.SetData(
                    (short)(DataFormats.GetDataFormat(CFSTR_INETURLA).Id),
                    Encoding.Default.GetBytes("http://blogs.msdn.com/delay/rss.xml\0"));
                virtualFileDataObject.SetData(
                    (short)(DataFormats.GetDataFormat(DataFormats.Text).Id),
                    Encoding.Default.GetBytes("[The RSS feed for Delay's Blog]\0"));
    
                DoDragDropOrClipboardSetDataObject(e.ChangedButton, TextUrl, virtualFileDataObject, DragDropEffects.Copy);
    

    Using the class linked should work. . Very nice and easy solution.

提交回复
热议问题