diff options
| author | Roy <roy.mail.net@gmail.com> | 2018-02-09 13:41:58 +0200 |
|---|---|---|
| committer | Roy <roy.mail.net@gmail.com> | 2018-02-09 13:41:58 +0200 |
| commit | c8c9606e545f49aae3d9f0524775436adbdf27e9 (patch) | |
| tree | 83d9fe870f652058af96f32b7159186f5b80f491 /Software/Visual_Studio/Tango.Visuals/MetroWindowControl/MetroWindowControl.cs | |
| parent | bfcefc0cf95f3b8d5243908753129c79bad8dc8b (diff) | |
| download | Tango-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.cs | 301 |
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; + } + } +} |
