aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs
diff options
context:
space:
mode:
authorRoy <roy.mail.net@gmail.com>2018-02-09 13:41:58 +0200
committerRoy <roy.mail.net@gmail.com>2018-02-09 13:41:58 +0200
commitc8c9606e545f49aae3d9f0524775436adbdf27e9 (patch)
tree83d9fe870f652058af96f32b7159186f5b80f491 /Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs
parentbfcefc0cf95f3b8d5243908753129c79bad8dc8b (diff)
downloadTango-c8c9606e545f49aae3d9f0524775436adbdf27e9.tar.gz
Tango-c8c9606e545f49aae3d9f0524775436adbdf27e9.zip
Added my Controls Library !
Implemented Tech VU Item.
Diffstat (limited to 'Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs')
-rw-r--r--Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs301
1 files changed, 301 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs b/Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs
new file mode 100644
index 000000000..26835d4d4
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs
@@ -0,0 +1,301 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.Visuals
+{
+ /// <summary>
+ /// Interaction logic for MetroWindowControl.xaml
+ /// </summary>
+ //[ContentProperty("RealContent")]
+ public partial class MetroWindowControl : ContentControl
+ {
+ private Window _window;
+ private bool _preventNextWindowMove;
+ private Grid PART_MainGrid;
+ private Thumb PART_ThumbMove;
+ private Button PART_ButtonClose;
+ private Button PART_ButtonMaximize;
+ private Button PART_ButtonMinimize;
+ private Thumb PART_ThumbResizeRight;
+ private Thumb PART_ThumbResizeBottom;
+ private Thumb PART_ThumbResizeBottomRight1;
+ private Thumb PART_ThumbResizeBottomRight2;
+
+ static MetroWindowControl()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(MetroWindowControl), new FrameworkPropertyMetadata(typeof(MetroWindowControl)));
+ }
+
+ public bool ShowCloseButton
+ {
+ get { return (bool)GetValue(ShowCloseButtonProperty); }
+ set { SetValue(ShowCloseButtonProperty, value); }
+ }
+ public static readonly DependencyProperty ShowCloseButtonProperty =
+ DependencyProperty.Register("ShowCloseButton", typeof(bool), typeof(MetroWindowControl), new PropertyMetadata(true));
+
+ public bool ShowMaximizeButton
+ {
+ get { return (bool)GetValue(ShowMaximizeButtonProperty); }
+ set { SetValue(ShowMaximizeButtonProperty, value); }
+ }
+ public static readonly DependencyProperty ShowMaximizeButtonProperty =
+ DependencyProperty.Register("ShowMaximizeButton", typeof(bool), typeof(MetroWindowControl), new PropertyMetadata(true));
+
+ public bool ShowMinimizeButton
+ {
+ get { return (bool)GetValue(ShowMinimizeButtonProperty); }
+ set { SetValue(ShowMinimizeButtonProperty, value); }
+ }
+ public static readonly DependencyProperty ShowMinimizeButtonProperty =
+ DependencyProperty.Register("ShowMinimizeButton", typeof(bool), typeof(MetroWindowControl), new PropertyMetadata(true));
+
+ public Brush TitleBackground
+ {
+ get { return (Brush)GetValue(TitleBackgroundProperty); }
+ set { SetValue(TitleBackgroundProperty, value); }
+ }
+ public static readonly DependencyProperty TitleBackgroundProperty =
+ DependencyProperty.Register("TitleBackground", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public Brush TitleInactiveBackground
+ {
+ get { return (Brush)GetValue(TitleInactiveBackgroundProperty); }
+ set { SetValue(TitleInactiveBackgroundProperty, value); }
+ }
+ public static readonly DependencyProperty TitleInactiveBackgroundProperty =
+ DependencyProperty.Register("TitleInactiveBackground", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public Brush TitleForeground
+ {
+ get { return (Brush)GetValue(TitleForegroundProperty); }
+ set { SetValue(TitleForegroundProperty, value); }
+ }
+ public static readonly DependencyProperty TitleForegroundProperty =
+ DependencyProperty.Register("TitleForeground", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public Brush TitleControlsHoverBrush
+ {
+ get { return (Brush)GetValue(TitleControlsHoverBrushProperty); }
+ set { SetValue(TitleControlsHoverBrushProperty, value); }
+ }
+ public static readonly DependencyProperty TitleControlsHoverBrushProperty =
+ DependencyProperty.Register("TitleControlsHoverBrush", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public double TitleHeight
+ {
+ get { return (double)GetValue(TitleHeightProperty); }
+ set { SetValue(TitleHeightProperty, value); }
+ }
+ public static readonly DependencyProperty TitleHeightProperty =
+ DependencyProperty.Register("TitleHeight", typeof(double), typeof(MetroWindowControl), new PropertyMetadata(35.0));
+
+ public Brush TitleControlsPressedBrush
+ {
+ get { return (Brush)GetValue(TitleControlsPressedBrushProperty); }
+ set { SetValue(TitleControlsPressedBrushProperty, value); }
+ }
+ public static readonly DependencyProperty TitleControlsPressedBrushProperty =
+ DependencyProperty.Register("TitleControlsPressedBrush", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public double TitleFontSize
+ {
+ get { return (double)GetValue(TitleFontSizeProperty); }
+ set { SetValue(TitleFontSizeProperty, value); }
+ }
+ public static readonly DependencyProperty TitleFontSizeProperty =
+ DependencyProperty.Register("TitleFontSize", typeof(double), typeof(MetroWindowControl), new PropertyMetadata(12.0));
+
+ public double BlurRadius
+ {
+ get { return (double)GetValue(BlurRadiusProperty); }
+ set { SetValue(BlurRadiusProperty, value); }
+ }
+ public static readonly DependencyProperty BlurRadiusProperty =
+ DependencyProperty.Register("BlurRadius", typeof(double), typeof(MetroWindowControl), new PropertyMetadata(10.0));
+
+ public Brush BorderInactiveBrush
+ {
+ get { return (Brush)GetValue(BorderInactiveBrushProperty); }
+ set { SetValue(BorderInactiveBrushProperty, value); }
+ }
+ public static readonly DependencyProperty BorderInactiveBrushProperty =
+ DependencyProperty.Register("BorderInactiveBrush", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public Brush BorderActiveBrush
+ {
+ get { return (Brush)GetValue(BorderActiveBrushProperty); }
+ set { SetValue(BorderActiveBrushProperty, value); }
+ }
+ public static readonly DependencyProperty BorderActiveBrushProperty =
+ DependencyProperty.Register("BorderActiveBrush", typeof(Brush), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public bool AllowResize
+ {
+ get { return (bool)GetValue(AllowResizeProperty); }
+ set { SetValue(AllowResizeProperty, value); }
+ }
+ public static readonly DependencyProperty AllowResizeProperty =
+ DependencyProperty.Register("AllowResize", typeof(bool), typeof(MetroWindowControl), new PropertyMetadata(true));
+
+ public DataTemplate TitleTemplate
+ {
+ get { return (DataTemplate)GetValue(TitleTemplateProperty); }
+ set { SetValue(TitleTemplateProperty, value); }
+ }
+ public static readonly DependencyProperty TitleTemplateProperty =
+ DependencyProperty.Register("TitleTemplate", typeof(DataTemplate), typeof(MetroWindowControl), new PropertyMetadata(null));
+ public FrameworkElement RealContent
+ {
+ get { return (FrameworkElement)GetValue(RealContentProperty); }
+ set { SetValue(RealContentProperty, value); }
+ }
+ public static readonly DependencyProperty RealContentProperty =
+ DependencyProperty.Register("RealContent", typeof(FrameworkElement), typeof(MetroWindowControl), new PropertyMetadata(null));
+
+ public MetroWindowControl()
+ {
+ //this.Loaded += MetroWindowControl_Loaded;
+ }
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ if (DesignerProperties.GetIsInDesignMode(this)) return;
+
+ _window = Window.GetWindow(this);
+
+ if (_window == null) throw new InvalidOperationException("MetroWindowControl must be nested inside a window.");
+
+ _window.WindowStyle = WindowStyle.None;
+ _window.ResizeMode = ResizeMode.NoResize;
+
+ PART_MainGrid = GetTemplateChild(nameof(PART_MainGrid)) as Grid;
+ PART_ThumbMove = GetTemplateChild(nameof(PART_ThumbMove)) as Thumb;
+ PART_ButtonMinimize = GetTemplateChild(nameof(PART_ButtonMinimize)) as Button;
+ PART_ButtonMaximize = GetTemplateChild(nameof(PART_ButtonMaximize)) as Button;
+ PART_ButtonClose = GetTemplateChild(nameof(PART_ButtonClose)) as Button;
+ PART_ThumbResizeRight = GetTemplateChild(nameof(PART_ThumbResizeRight)) as Thumb;
+ PART_ThumbResizeBottom = GetTemplateChild(nameof(PART_ThumbResizeBottom)) as Thumb;
+ PART_ThumbResizeBottomRight1 = GetTemplateChild(nameof(PART_ThumbResizeBottomRight1)) as Thumb;
+ PART_ThumbResizeBottomRight2 = GetTemplateChild(nameof(PART_ThumbResizeBottomRight2)) as Thumb;
+
+ if (_window.AllowsTransparency == true)
+ {
+ PART_MainGrid.Margin = new Thickness(BlurRadius / 2);
+ _window.Background = Brushes.Transparent;
+ }
+
+ _window.StateChanged += _window_StateChanged;
+
+ this.BorderBrush = null;
+
+ PART_ThumbMove.MouseDoubleClick += OnMoveThumbDoubleClick;
+ PART_ThumbMove.DragDelta += OnTitleThumbMove;
+ PART_ButtonMinimize.Click += OnMinimizeClick;
+ PART_ButtonMaximize.Click += OnMaximizeRestoreClick;
+ PART_ButtonClose.Click += OnCloseClick;
+ PART_ThumbResizeRight.DragDelta += OnRightThumbResize;
+ PART_ThumbResizeBottom.DragDelta += OnBottomThumbResize;
+ PART_ThumbResizeBottomRight1.DragDelta += OnRightBottomThumbResize;
+ PART_ThumbResizeBottomRight2.DragDelta += OnRightBottomThumbResize;
+ }
+
+ private void OnTitleThumbMove(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
+ {
+ if (_preventNextWindowMove)
+ {
+ _preventNextWindowMove = false;
+ return;
+ }
+
+ _window.Left += e.HorizontalChange;
+ _window.Top += e.VerticalChange;
+ }
+
+ private void OnRightThumbResize(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
+ {
+ _window.Width += e.HorizontalChange;
+ }
+
+ private void OnBottomThumbResize(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
+ {
+ _window.Height += e.VerticalChange;
+ }
+
+ private void OnRightBottomThumbResize(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
+ {
+ _window.Width += e.HorizontalChange;
+ _window.Height += e.VerticalChange;
+ }
+
+ private void OnMoveThumbDoubleClick(object sender, MouseButtonEventArgs e)
+ {
+ if (!ShowMaximizeButton) return;
+
+ _preventNextWindowMove = true;
+
+ if (_window.WindowState == WindowState.Normal)
+ {
+ _window.WindowState = WindowState.Maximized;
+ }
+ else if (_window.WindowState == WindowState.Maximized)
+ {
+ _window.WindowState = WindowState.Normal;
+ }
+ }
+
+ private void _window_StateChanged(object sender, EventArgs e)
+ {
+ if (_window.WindowState == WindowState.Maximized)
+ {
+ PART_MainGrid.Margin = new Thickness();
+ }
+ else if (_window.WindowState == WindowState.Normal)
+ {
+ if (_window.AllowsTransparency == true)
+ {
+ PART_MainGrid.Margin = new Thickness(5);
+ }
+ }
+ }
+
+ private void OnCloseClick(object sender, RoutedEventArgs e)
+ {
+ _window.Close();
+ }
+
+ private void OnMaximizeRestoreClick(object sender, RoutedEventArgs e)
+ {
+ if (_window.WindowState == WindowState.Normal)
+ {
+ _window.WindowState = WindowState.Maximized;
+ }
+ else if (_window.WindowState == WindowState.Maximized)
+ {
+ _window.WindowState = WindowState.Normal;
+ }
+ }
+
+ private void OnMinimizeClick(object sender, RoutedEventArgs e)
+ {
+ _window.WindowState = WindowState.Minimized;
+ }
+ }
+}