61 lines
1.7 KiB
C#
61 lines
1.7 KiB
C#
|
|
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)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|