using System; using System.Windows; using System.Windows.Input; namespace MainShell.Common.Behaviors { public static class WindowDragMoveBehavior { public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached( "IsEnabled", typeof(bool), typeof(WindowDragMoveBehavior), new PropertyMetadata(false, OnIsEnabledChanged)); public static bool GetIsEnabled(DependencyObject obj) { return (bool)obj.GetValue(IsEnabledProperty); } public static void SetIsEnabled(DependencyObject obj, bool value) { obj.SetValue(IsEnabledProperty, value); } private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var element = d as UIElement; if (element == null) { return; } if ((bool)e.NewValue) { element.MouseLeftButtonDown += OnMouseLeftButtonDown; return; } element.MouseLeftButtonDown -= OnMouseLeftButtonDown; } private static void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var element = sender as DependencyObject; var window = element != null ? Window.GetWindow(element) : null; if (window == null || e.ButtonState != MouseButtonState.Pressed) { return; } try { window.DragMove(); e.Handled = true; } catch (InvalidOperationException) { } } } }