using MahApps.Metro.Controls; 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.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Tango.FSE.LogViewer.UI { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : MetroWindow { private Point _startPoint; private bool _isMouseDown; public MainWindow() { InitializeComponent(); btnMinimize.Click += (_, __) => WindowState = WindowState.Minimized; btnMaximize.Click += (_, __) => WindowState = WindowState == WindowState.Maximized ? WindowState = WindowState.Normal : WindowState = WindowState.Maximized; btnClose.Click += (_, __) => Close(); gridTitle.MouseLeftButtonDown += (x, e) => { Mouse.Capture(gridTitle); _startPoint = e.GetPosition(this); if (e.ClickCount > 1) { WindowState = WindowState == WindowState.Normal ? WindowState.Maximized : WindowState.Normal; return; } _isMouseDown = true; }; gridTitle.MouseLeftButtonUp += (x, e) => { _isMouseDown = false; gridTitle.ReleaseMouseCapture(); }; gridTitle.MouseMove += GridTitle_MouseMove; StateChanged += MainWindow_StateChanged; } private void MainWindow_StateChanged(object sender, EventArgs e) { if (WindowState == WindowState.Maximized) { btnMaximize.Icon = MaterialDesignThemes.Wpf.PackIconKind.WindowRestore; //_settings.WindowMaximizedOnStartup = true; //_settings.Save(); } else if (WindowState == WindowState.Normal) { btnMaximize.Icon = MaterialDesignThemes.Wpf.PackIconKind.WindowMaximize; //_settings.WindowMaximizedOnStartup = false; //_settings.Save(); } } private void GridTitle_MouseMove(object sender, MouseEventArgs e) { if (_isMouseDown) { if (WindowState == WindowState.Maximized) { var previousWidth = Width; WindowState = WindowState.Normal; var currentWidth = Width; var locationPrecentageBefore = _startPoint.X / previousWidth; var newLocationX = currentWidth * locationPrecentageBefore; _startPoint = new Point(newLocationX, _startPoint.Y); } else { Point pointToWindow = Mouse.GetPosition(this); Point pointToScreen = PointToScreen(pointToWindow); Left = pointToScreen.X - _startPoint.X; Top = pointToScreen.Y - _startPoint.Y; } } } } }