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);
            }
        }