public WindowStateHandler(IWindowStateStore store, Window window, string windowName, bool autoAttach = false) { _store = store; _window = window; _windowName = windowName; if (autoAttach) { _window.Loaded += WindowOnLoaded; _window.Unloaded += WindowOnUnloaded; _window.Closing += WindowOnClosing; _window.StateChanged += WindowOnStateChanged; _window.LocationChanged += WindowOnLocationChanged; _window.SizeChanged += WindowOnSizeChanged; } // TODO: Track MetroWindow do not using restore bounds _firstRestoreHandler = () => { if (_window.WindowState == WindowState.Normal) { if (_store.WindowPositions.TryGetValue(_windowName, out var windowPosition)) { windowPosition.SetPositionToWindow(_window); windowPosition.SetSizeToWindow(_window); } _firstRestoreHandler = null; } }; }
public static void AttachPositionHandler(this Window window, IWindowStateStore store, string windowName, bool isMainWindow = false) { var unused = new WindowStateHandler(store, window, windowName, true) { IsMainWindow = isMainWindow }; }
public void RestoreSizeAndLocation(IWindowStateStore config) { if (!config.WindowPositions.ContainsKey(_windowName)) { return; } _ignoreChanges = true; try { var data = config.WindowPositions[_windowName]; if (data.Position != null) { _window.Left = data.Position.X; _window.Top = data.Position.Y; } if (data.Size != null) { _window.Width = data.Size.X; _window.Height = data.Size.Y; } } finally { _ignoreChanges = false; } }
public WindowStateHandler(IWindowStateStore store, Window window, string windowName, bool autoAttach = false) { _store = store; _window = window; _windowName = windowName; if (autoAttach) { _window.Loaded += WindowOnLoaded; _window.LocationChanged += WindowOnLocationChanged; _window.SizeChanged += WindowOnSizeChanged; _window.Unloaded += WindowOnUnloaded; } }
public void SaveSize(IWindowStateStore config) { if (config == null || _ignoreChanges) { return; } if (!config.WindowPositions.ContainsKey(_windowName)) { config.WindowPositions[_windowName] = new WindowPosition(); } config.WindowPositions[_windowName].Size = new WindowPosition.Point { X = _window.Width, Y = _window.Height }; }
public void SavePosition(IWindowStateStore config) { if (config == null || _ignoreChanges) { return; } if (_window.Left < 0 || _window.Top < 0) { return; } if (!config.WindowPositions.ContainsKey(_windowName)) { config.WindowPositions[_windowName] = new WindowPosition(); } config.WindowPositions[_windowName].Position = new WindowPosition.Point { X = _window.Left, Y = _window.Top }; }
public void RegisterStateStore(IWindowStateStore store) { _store = store; }
public static void AttachPositionHandler(this Window window, IWindowStateStore store, string windowName) { var unused = new WindowStateHandler(store, window, windowName, true); }