protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { PointInWindowPart ptPos = this.FindPointPossition(e.MouseDevice.GetPosition(this)); if (ptPos == PointInWindowPart.InTitle || this.DragFullWindows && (ptPos == PointInWindowPart.None)) { this.DragMove(); } else if (ptPos != PointInWindowPart.None && this.Resizable) { Win32API.SendMessage(this._interopHelper.Handle, Win32API.WM_SYSCOMMAND, (int)(Win32API.SC_SIZE + ptPos), 0); } base.OnMouseLeftButtonDown(e); }
private PointInWindowPart FindPointPossition(Point pt) { if (this.ResizeMode != ResizeMode.NoResize && this.ResizeMode != ResizeMode.CanMinimize) { return(PointInWindowPart.None); } if (this.WindowState == System.Windows.WindowState.Maximized) { return(PointInWindowPart.None); } Rect titleRect = new Rect(this.CornerRadius, this.BorderThickness.Top, this.ActualWidth - this.CornerRadius * 2, this.TitleHeight - this.BorderThickness.Top); Rect leftBorderRect = new Rect(0, this.CornerRadius, this.BorderThickness.Left, this.ActualHeight - this.CornerRadius * 2); Rect rightBorderRect = new Rect(this.ActualWidth - this.BorderThickness.Right, this.CornerRadius, this.BorderThickness.Right, this.ActualHeight - this.CornerRadius * 2); Rect topBorderRect = new Rect(this.CornerRadius, 0, this.ActualWidth - this.CornerRadius * 2, this.BorderThickness.Top); Rect botttomBorderRect = new Rect(this.CornerRadius, this.ActualHeight - this.BorderThickness.Bottom, this.ActualWidth - this.CornerRadius * 2, this.BorderThickness.Bottom); Rect topLeftBorderRect = new Rect(0, 0, this.CornerRadius, this.CornerRadius); Rect topRightBorderRect = new Rect(this.ActualWidth - this.CornerRadius, 0, this.CornerRadius, this.CornerRadius); Rect bottomLeftBorderRect = new Rect(0, this.ActualHeight - this.CornerRadius, this.CornerRadius, this.CornerRadius); Rect bottomRightBorderRect = new Rect(this.ActualWidth - this.CornerRadius, this.ActualHeight - this.CornerRadius, this.CornerRadius, this.CornerRadius); PointInWindowPart ptPos = PointInWindowPart.None; if (this.PtInRect(pt, titleRect)) { ptPos = PointInWindowPart.InTitle; this.Cursor = Cursors.Arrow; } else if (this.PtInRect(pt, leftBorderRect)) { ptPos = PointInWindowPart.Left; if (this.Resizable) { this.Cursor = Cursors.SizeWE; } } else if (this.PtInRect(pt, rightBorderRect)) { ptPos = PointInWindowPart.Right; if (this.Resizable) { this.Cursor = Cursors.SizeWE; } } else if (this.PtInRect(pt, topBorderRect)) { ptPos = PointInWindowPart.Top; if (this.Resizable) { this.Cursor = Cursors.SizeNS; } } else if (this.PtInRect(pt, botttomBorderRect)) { ptPos = PointInWindowPart.Bottom; if (this.Resizable) { this.Cursor = Cursors.SizeNS; } } else if (this.PtInRect(pt, topLeftBorderRect)) { ptPos = PointInWindowPart.TopLeft; if (this.Resizable) { this.Cursor = Cursors.SizeNWSE; } } else if (this.PtInRect(pt, topRightBorderRect)) { ptPos = PointInWindowPart.TopRight; if (this.Resizable) { this.Cursor = Cursors.SizeNESW; } } else if (this.PtInRect(pt, bottomLeftBorderRect)) { ptPos = PointInWindowPart.BottomLeft; if (this.Resizable) { this.Cursor = Cursors.SizeNESW; } } else if (this.PtInRect(pt, bottomRightBorderRect)) { ptPos = PointInWindowPart.BottomRight; if (this.Resizable) { this.Cursor = Cursors.SizeNWSE; } } else { this.Cursor = Cursors.Arrow; } Debug.WriteLine(ptPos); return(ptPos); }