private void UpdateCursor(WindowResizeGripDirection direction)
        {
            switch (direction)
            {
            case WindowResizeGripDirection.None:
                this.Cursor = Cursors.Arrow;
                break;

            case WindowResizeGripDirection.Left:
            case WindowResizeGripDirection.Right:
                this.Cursor = Cursors.SizeWE;
                break;

            case WindowResizeGripDirection.Top:
            case WindowResizeGripDirection.Bottom:
                this.Cursor = Cursors.SizeNS;
                break;

            case WindowResizeGripDirection.TopLeft:
            case WindowResizeGripDirection.BottomRight:
                this.Cursor = Cursors.SizeNWSE;
                break;

            case WindowResizeGripDirection.TopRight:
            case WindowResizeGripDirection.BottomLeft:
                this.Cursor = Cursors.SizeNESW;
                break;
            }
        }
        private void BeginResize(WindowResizeGripDirection direction)
        {
            HwndSource hwndSource = (HwndSource)PresentationSource.FromVisual((Visual)this);

            if (hwndSource == null)
            {
                return;
            }
            NativeMethods.SendMessage(hwndSource.Handle, 274, (IntPtr)((int)(61440 + direction)), IntPtr.Zero);
        }
        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            base.OnMouseDown(e);
            WindowResizeGripDirection direction = this.HitTest(e.GetPosition((IInputElement)this));

            if (direction == WindowResizeGripDirection.None)
            {
                return;
            }
            this.BeginResize(direction);
        }