| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using System.Windows;
 
- using System.Windows.Controls;
 
- using System.Windows.Interop;
 
- using System.Runtime.InteropServices;
 
- using System.Windows.Media;
 
- using System.Windows.Input;
 
- namespace WpfStyleableWindow.StyleableWindow
 
- {
 
-     public static class ShowSystemMenuBehavior
 
-     {        
 
-         #region TargetWindow
 
-         public static Window GetTargetWindow(DependencyObject obj)
 
-         {
 
-             return (Window)obj.GetValue(TargetWindow);
 
-         }
 
-         public static void SetTargetWindow(DependencyObject obj, Window window)
 
-         {
 
-             obj.SetValue(TargetWindow, window);
 
-         }
 
-         public static readonly DependencyProperty TargetWindow = DependencyProperty.RegisterAttached("TargetWindow", typeof(Window), typeof(ShowSystemMenuBehavior));        
 
-         #endregion
 
-         #region LeftButtonShowAt
 
-         public static UIElement GetLeftButtonShowAt(DependencyObject obj)
 
-         {
 
-             return (UIElement)obj.GetValue(LeftButtonShowAt);
 
-         }
 
-         public static void SetLeftButtonShowAt(DependencyObject obj, UIElement element)
 
-         {
 
-             obj.SetValue(LeftButtonShowAt, element);
 
-         }
 
-         public static readonly DependencyProperty LeftButtonShowAt = DependencyProperty.RegisterAttached("LeftButtonShowAt",
 
-             typeof(UIElement), typeof(ShowSystemMenuBehavior),
 
-             new UIPropertyMetadata(null, LeftButtonShowAtChanged));
 
-         #endregion
 
-         #region RightButtonShow
 
-         public static bool GetRightButtonShow(DependencyObject obj)
 
-         {
 
-             return (bool)obj.GetValue(RightButtonShow);
 
-         }
 
-         public static void SetRightButtonShow(DependencyObject obj, bool arg)
 
-         {
 
-             obj.SetValue(RightButtonShow, arg);
 
-         }
 
-         public static readonly DependencyProperty RightButtonShow = DependencyProperty.RegisterAttached("RightButtonShow",
 
-             typeof(bool), typeof(ShowSystemMenuBehavior),
 
-             new UIPropertyMetadata(false, RightButtonShowChanged));
 
-         #endregion
 
-         #region LeftButtonShowAt
 
-         
 
-         static void LeftButtonShowAtChanged(object sender, DependencyPropertyChangedEventArgs e)
 
-         {
 
-             var element = sender as UIElement;
 
-             if (element != null)
 
-             {
 
-                 element.MouseLeftButtonDown += LeftButtonDownShow;
 
-             }
 
-         }
 
-         static bool leftButtonToggle = true;
 
-         static void LeftButtonDownShow(object sender, System.Windows.Input.MouseButtonEventArgs e)
 
-         {
 
-             if (leftButtonToggle)
 
-             {
 
-                 var element = ((UIElement)sender).GetValue(LeftButtonShowAt);
 
-                 var showMenuAt = ((Visual)element).PointToScreen(new Point(0, 0));
 
-                 var targetWindow = ((UIElement)sender).GetValue(TargetWindow) as Window;
 
-                 SystemMenuManager.ShowMenu(targetWindow, showMenuAt);
 
-                 leftButtonToggle = !leftButtonToggle;
 
-             }
 
-             else
 
-             {
 
-                 leftButtonToggle = !leftButtonToggle;
 
-             }
 
-         }
 
-         #endregion
 
-         #region RightButtonShow handlers
 
-         private static void RightButtonShowChanged(object sender, DependencyPropertyChangedEventArgs e)
 
-         {
 
-             var element = sender as UIElement;
 
-             if (element != null)
 
-             {
 
-                 element.MouseRightButtonDown += RightButtonDownShow;
 
-             }
 
-         }
 
-         static void RightButtonDownShow(object sender, System.Windows.Input.MouseButtonEventArgs e)
 
-         {
 
-             var element = (UIElement)sender;
 
-             var targetWindow = element.GetValue(TargetWindow) as Window;
 
-             var showMenuAt = targetWindow.PointToScreen(Mouse.GetPosition((targetWindow)));
 
-             SystemMenuManager.ShowMenu(targetWindow, showMenuAt);
 
-         }
 
-         #endregion       
 
-     }
 
- }
 
 
  |