private void UpdateBounds()
        {
            if (_window.WindowState != WindowState.Normal)
            {
                return;
            }

            var resizeBorder = ExtendedResizeBorder.GetExtendedResizeBorder(_window);

            if (resizeBorder == null)
            {
                return;
            }

            var bounds = new Rect(_window.Left, _window.Top, _window.ActualWidth, _window.ActualHeight);

            _borders.ForEach(x => x.Render(bounds, resizeBorder));
        }
Ejemplo n.º 2
0
        public void Render(Rect bounds, ExtendedResizeBorder extendedResizeBorder)
        {
            Opacity = 1.0 / 255;

            var shrink = Normalize(new Thickness(1));
            var edge   = extendedResizeBorder.Radius;
            var inner  = new Rect(new Point(bounds.Left + shrink.Left, bounds.Top + shrink.Top),
                                  new Point(bounds.Right - shrink.Right, bounds.Bottom - shrink.Bottom));
            var outer = new Rect(new Point(bounds.Left - edge.Left, bounds.Top - edge.Top),
                                 new Point(bounds.Right + edge.Right, bounds.Bottom + edge.Bottom));

            inner   = Normalize(inner);
            outer   = Normalize(outer);
            _top    = edge.Top;
            _bottom = _top + bounds.Height;
            switch (Direction)
            {
            case Direction.Left:
                UpdateBounds(new Rect(new Point(outer.Left, outer.Top), new Point(inner.Left, outer.Bottom)));
                GlowBorder.HorizontalAlignment = HorizontalAlignment.Left;
                GlowBorder.Width = edge.Left + shrink.Left;
                break;

            case Direction.Right:
                UpdateBounds(new Rect(new Point(inner.Right, outer.Top), new Point(outer.Right, outer.Bottom)));
                GlowBorder.HorizontalAlignment = HorizontalAlignment.Right;
                GlowBorder.Width = edge.Right + edge.Right;
                break;

            case Direction.Top:
                UpdateBounds(new Rect(new Point(inner.Left, outer.Top), inner.TopRight));
                GlowBorder.VerticalAlignment = VerticalAlignment.Top;
                GlowBorder.Height            = edge.Top + edge.Top;
                break;

            case Direction.Bottom:
                UpdateBounds(new Rect(inner.BottomLeft, new Point(inner.Right, outer.Bottom)));
                GlowBorder.VerticalAlignment = VerticalAlignment.Bottom;
                GlowBorder.Height            = edge.Bottom + edge.Bottom;
                break;
            }
        }
        public ExtendedResizeController(Window window)
        {
            _window = window;

            var shadowBorder = ExtendedResizeBorder.GetExtendedResizeBorder(_window);

            if (shadowBorder == null)
            {
                return;
            }

            var left   = new ExtendedResizeWindow(Direction.Left);
            var top    = new ExtendedResizeWindow(Direction.Top);
            var right  = new ExtendedResizeWindow(Direction.Right);
            var bottom = new ExtendedResizeWindow(Direction.Bottom);

            _borders = new List <ExtendedResizeWindow> {
                left, top, right, bottom,
            };

            _windowInitStub = window.OnInitialized(Initialize);
        }
 public static void SetExtendedResizeBorder(Window element, ExtendedResizeBorder value)
 {
     element.SetValue(ExtendedResizeBorderProperty, value);
 }