using System.Windows; using EmbyToolbox.ViewModels; namespace EmbyToolbox.Behaviors; public static class SeriesRenamerDropTargetBehavior { public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached( "IsEnabled", typeof(bool), typeof(SeriesRenamerDropTargetBehavior), new PropertyMetadata(false, OnIsEnabledChanged)); public static void SetIsEnabled(DependencyObject d, bool value) => d.SetValue(IsEnabledProperty, value); public static bool GetIsEnabled(DependencyObject d) => (bool)d.GetValue(IsEnabledProperty); private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is not FrameworkElement fe) { return; } fe.AllowDrop = false; fe.PreviewDragOver -= OnPreviewDragOver; fe.PreviewDragLeave -= OnPreviewDragLeave; fe.PreviewDrop -= OnPreviewDrop; if (e.NewValue is true) { fe.AllowDrop = true; fe.PreviewDragOver += OnPreviewDragOver; fe.PreviewDragLeave += OnPreviewDragLeave; fe.PreviewDrop += OnPreviewDrop; } } private static void OnPreviewDragOver(object sender, DragEventArgs e) { if (sender is not FrameworkElement fe || fe.DataContext is not SeriesRenamerViewModel vm) { return; } if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effects = DragDropEffects.Copy; e.Handled = true; vm.IsRootTreeDragOver = true; } else { e.Effects = DragDropEffects.None; vm.IsRootTreeDragOver = false; } } private static void OnPreviewDragLeave(object sender, DragEventArgs e) { if (sender is not FrameworkElement fe || fe.DataContext is not SeriesRenamerViewModel vm) { return; } vm.IsRootTreeDragOver = false; } private static void OnPreviewDrop(object sender, DragEventArgs e) { if (sender is not FrameworkElement fe || fe.DataContext is not SeriesRenamerViewModel vm) { return; } vm.IsRootTreeDragOver = false; if (e.Data.GetData(DataFormats.FileDrop) is not string[] paths || paths.Length == 0) { e.Handled = true; return; } vm.ApplyDroppedPaths(paths); e.Handled = true; } }