Ejemplo n.º 1
0
        public static void SetDraggable(Image imagePreview, GrfImageWrapper wrapper)
        {
            imagePreview.Dispatch(delegate {
                imagePreview.MouseMove += (e, a) => {
                    if (a.LeftButton == MouseButtonState.Pressed)
                    {
                        VirtualFileDataObject virtualFileDataObject = new VirtualFileDataObject();

                        string name = (string)imagePreview.Tag;

                        List <FileDescriptor> descriptors = new List <FileDescriptor> {
                            new FileDescriptor {
                                Name           = name + (name.GetExtension() == null ? Imaging.GuessExtension(((BitmapSource)imagePreview.Source).Format) : ""),
                                Argument       = wrapper,
                                StreamContents = (grfData, filePath, stream, argument) => {
                                    GrfImageWrapper image = (GrfImageWrapper)argument;

                                    if (image.Image != null)
                                    {
                                        GrfImage grfImage = image.Image;

                                        string outputPath = TemporaryFilesManager.GetTemporaryFilePath("image_{0:0000}") + Imaging.GuessExtension(grfImage.GrfImageType);
                                        grfImage.Save(outputPath);

                                        var data = File.ReadAllBytes(outputPath);
                                        stream.Write(data, 0, data.Length);

                                        image.Image.Save(outputPath);
                                    }
                                }
                            }
                        };

                        virtualFileDataObject.Source = DragAndDropSource.Other;
                        virtualFileDataObject.SetData(descriptors);

                        try {
                            DoDragDrop(null, virtualFileDataObject, DragDropEffects.Copy);
                        }
                        catch (Exception err) {
                            ErrorHandler.HandleException(err);
                        }
                    }
                };
            });
        }