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
     };
 }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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
            };
        }
Exemplo n.º 6
0
        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;
 }
Exemplo n.º 8
0
 public static void AttachPositionHandler(this Window window, IWindowStateStore store, string windowName)
 {
     var unused = new WindowStateHandler(store, window, windowName, true);
 }