5 using System.Reflection;
6 using System.Runtime.InteropServices;
8 using System.Windows.Controls;
9 using System.Windows.Interop;
11 using SiliconStudio.Presentation.Extensions;
13 namespace SiliconStudio.Presentation.Behaviors
23 public static DependencyProperty HandlesMouseWheelScrollingProperty = DependencyProperty.RegisterAttached(
"HandlesMouseWheelScrolling", typeof(
bool), typeof(
BehaviorProperties),
new PropertyMetadata(
true, HandlesMouseWheelScrollingChanged));
28 public static DependencyProperty KeepTaskbarWhenMaximizedProperty = DependencyProperty.RegisterAttached(
"KeepTaskbarWhenMaximized", typeof(
bool), typeof(
BehaviorProperties),
new PropertyMetadata(
false, KeepTaskbarWhenMaximizedChanged));
37 return (
bool)target.GetValue(HandlesMouseWheelScrollingProperty);
47 target.SetValue(HandlesMouseWheelScrollingProperty, value);
57 return (
bool)target.GetValue(KeepTaskbarWhenMaximizedProperty);
67 target.SetValue(KeepTaskbarWhenMaximizedProperty, value);
70 private static void HandlesMouseWheelScrollingChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
72 var scrollViewer = d as ScrollViewer ?? d.FindVisualChildOfType<ScrollViewer>();
74 if (scrollViewer != null)
77 typeof(ScrollViewer).GetProperty(
"HandlesMouseWheelScrolling", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(scrollViewer, e.NewValue);
82 var frameworkElement = d as FrameworkElement;
83 if (frameworkElement != null && !frameworkElement.IsLoaded)
86 frameworkElement.Loaded += (sender, args) =>
89 var loadedScrollViewer = dependencyObject.FindVisualChildOfType<ScrollViewer>();
90 if (loadedScrollViewer != null)
91 typeof(ScrollViewer).GetProperty(
"HandlesMouseWheelScrolling", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(loadedScrollViewer, e.NewValue);
97 private static void KeepTaskbarWhenMaximizedChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
104 var hwnd =
new WindowInteropHelper(window).Handle;
105 var source = HwndSource.FromHwnd(hwnd);
108 source.AddHook(WindowProc);
113 window.SourceInitialized += (sender, arg) =>
115 var hwnd =
new WindowInteropHelper(window).Handle;
116 var source = HwndSource.FromHwnd(hwnd);
119 source.AddHook(WindowProc);
126 private static IntPtr WindowProc(IntPtr hwnd,
int msg, IntPtr wparam, IntPtr lparam, ref
bool handled)
132 var mmi = (NativeHelper.MINMAXINFO)Marshal.PtrToStructure(lparam, typeof(NativeHelper.MINMAXINFO));
133 var monitor = NativeHelper.MonitorFromWindow(hwnd, NativeHelper.MONITOR_DEFAULTTONEAREST);
134 if (monitor != IntPtr.Zero)
136 var monitorInfo =
new NativeHelper.MONITORINFO();
137 NativeHelper.GetMonitorInfo(monitor, monitorInfo);
138 NativeHelper.RECT rcWorkArea = monitorInfo.rcWork;
139 NativeHelper.RECT rcMonitorArea = monitorInfo.rcMonitor;
140 mmi.ptMaxPosition.X = Math.Abs(rcWorkArea.Left - rcMonitorArea.Left);
141 mmi.ptMaxPosition.Y = Math.Abs(rcWorkArea.Top - rcMonitorArea.Top);
142 mmi.ptMaxSize.X = Math.Abs(rcWorkArea.Right - rcWorkArea.Left);
143 mmi.ptMaxSize.Y = Math.Abs(rcWorkArea.Bottom - rcWorkArea.Top);
146 Marshal.StructureToPtr(mmi, lparam,
true);
static void SetHandlesMouseWheelScrolling(DependencyObject target, bool value)
Sets the value of the HandlesMouseWheelScrollingProperty dependency property attached to the given De...
static void SetKeepTaskbarWhenMaximized(DependencyObject target, bool value)
Sets the value of the KeepTaskbarWhenMaximizedProperty dependency property attached to the given Depe...
This static class contains attached dependency properties that can be used as behavior to add or chan...
static bool GetHandlesMouseWheelScrolling(DependencyObject target)
Gets the current value of the HandlesMouseWheelScrollingProperty dependency property attached to the ...
static bool GetKeepTaskbarWhenMaximized(DependencyObject target)
Gets the current value of the KeepTaskbarWhenMaximizedProperty dependency property attached to the gi...