protected override void DragStart(object sender, MouseEventArgs e) { var source = e.OriginalSource as DependencyObject; if (Utils.FindParentOfTypes(source, fileDragSources) is FrameworkElement parent) { var args = new UiFileDragArgs { Element = parent, Source = parent.DataContext }; CallOnDragChain(args); if (args.Files?.Count > 0) { var dataObject = new DataObject(DataFormats.FileDrop, args.Files.ToArray()); dataObject.SetData(AdditionalKey, new object()); DragDrop.DoDragDrop(source, dataObject, DragDropEffects.Move); foreach (var file in args.Files) { if (File.Exists(file)) { File.Delete(file); } } startPosition = null; } } }
private void CallOnDragChain(UiFileDragArgs args) { OnFileDrag?.Invoke(args); if (args.Files?.Count > 0) { return; } if (args.Element.DataContext is IFileDragDropAware parentAware) { parentAware.OnFileDrag(args); if (args.Files?.Count > 0) { return; } } if (args.Element != containerElement && containerElement.DataContext is IFileDragDropAware elementAware) { elementAware.OnFileDrag(args); } }