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)); }
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); }