internal async Task OnReceiveSelectUIs(EngineNS.UISystem.UIElement[] selectedUIs)
        {
            mSelectedUIDatas.Clear();
            if (selectedUIs != null)
            {
                foreach (var ui in selectedUIs)
                {
                    var data = new EngineNS.UISystem.Editor.SelectedData();
                    data.UI        = ui;
                    data.StartRect = ui.DesignRect;
                    var rc           = EngineNS.CEngine.Instance.RenderContext;
                    var showRectInit = new EngineNS.UISystem.Controls.ImageInitializer();
                    showRectInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uva_selectrect.uvanim", EngineNS.RName.enRNameType.Editor);
                    showRectInit.ImageBrush.TileMode  = EngineNS.UISystem.Brush.enTileMode.None;
                    var showRect = new EngineNS.UISystem.Controls.Image();
                    await showRect.Initialize(rc, showRectInit);

                    data.ShowRect = showRect;

                    mSelectedUIDatas[ui] = data;
                }
            }
            await InitSlotOperator();

            UpdateSelectedRectShow();
        }
 // 操作
 public void Operation(EngineNS.UISystem.Editor.SelectedData operationUIData, ref EngineNS.Vector2 mouseDelta, float scaleDelta)
 {
     if (!mInitialized)
     {
         return;
     }
     OperationAnchorsHandle(operationUIData, ref mouseDelta, scaleDelta);
     OperationTransformHandle(operationUIData, ref mouseDelta, scaleDelta);
 }
 // 选中操作点
 public void ProcessSelect(EngineNS.UISystem.Editor.SelectedData operationUIData, ref EngineNS.PointF mouseInViewport)
 {
     if (!mInitialized)
     {
         return;
     }
     ProcessSelectAnchorsHandle(operationUIData, ref mouseInViewport);
     ProcessSelectTransformHandle(ref mouseInViewport);
 }
 // 更新显示
 public void UpdateShow(EngineNS.UISystem.Editor.SelectedData operationUIData, ref EngineNS.RectangleF windowDesignSize, ref EngineNS.RectangleF windowDrawSize)
 {
     if (!mInitialized)
     {
         return;
     }
     UpdateCanvasAnchorsHandlesShow(operationUIData, ref windowDesignSize, ref windowDrawSize);
     UpdateTransformOperationAssistShow(operationUIData);
 }
        void ProcessSelectAnchorsHandle(EngineNS.UISystem.Editor.SelectedData operationUIData, ref EngineNS.PointF mouseInViewport)
        {
            if (operationUIData == null || mSelectedAnchorHandleType == enCanvasAnchors.Unknow)
            {
                return;
            }
            var anchorOp = operationUIData.UI.Slot as EngineNS.UISystem.Controls.Containers.CanvasSlot;

            if (anchorOp == null)
            {
                return;
            }

            mCanvasAnchorsHandles[(int)mSelectedAnchorHandleType].StartMin = anchorOp.Minimum;
            mCanvasAnchorsHandles[(int)mSelectedAnchorHandleType].StartMax = anchorOp.Maximum;
        }
        void OperationTransformHandle(EngineNS.UISystem.Editor.SelectedData data, ref EngineNS.Vector2 mouseDelta, float scaleDelta)
        {
            if (mSelectedHandleType == enTransformOPHandleType.Unknow)
            {
                return;
            }

            switch (mSelectedHandleType)
            {
            case enTransformOPHandleType.Left:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds    = data.UI.DesignRect;
                    var width = data.StartRect.Width - mouseDelta.X * scaleDelta;
                    if (width < 0)
                    {
                        ds.Width = -width;
                    }
                    else
                    {
                        ds.X     = data.StartRect.X + mouseDelta.X * scaleDelta;
                        ds.Width = width;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.LeftTop:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds    = data.UI.DesignRect;
                    var width = data.StartRect.Width - mouseDelta.X * scaleDelta;
                    if (width < 0)
                    {
                        ds.Width = -width;
                    }
                    else
                    {
                        ds.X     = data.StartRect.X + mouseDelta.X * scaleDelta;
                        ds.Width = width;
                    }

                    var height = data.StartRect.Height - mouseDelta.Y * scaleDelta;
                    if (height < 0)
                    {
                        ds.Height = -height;
                    }
                    else
                    {
                        ds.Y      = data.StartRect.Y + mouseDelta.Y * scaleDelta;
                        ds.Height = height;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.Top:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds     = data.UI.DesignRect;
                    var height = data.StartRect.Height - mouseDelta.Y * scaleDelta;
                    if (height < 0)
                    {
                        ds.Height = -height;
                    }
                    else
                    {
                        ds.Y      = data.StartRect.Y + mouseDelta.Y * scaleDelta;
                        ds.Height = height;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.RightTop:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds     = data.UI.DesignRect;
                    var height = data.StartRect.Height - mouseDelta.Y * scaleDelta;
                    if (height < 0)
                    {
                        ds.Height = -height;
                    }
                    else
                    {
                        ds.Y      = data.StartRect.Y + mouseDelta.Y * scaleDelta;
                        ds.Height = height;
                    }
                    var width = data.StartRect.Width + mouseDelta.X * scaleDelta;
                    if (width < 0)
                    {
                        ds.X     = data.StartRect.Left + width;
                        ds.Width = -width;
                    }
                    else
                    {
                        ds.Width = width;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.Right:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds    = data.UI.DesignRect;
                    var width = data.StartRect.Width + mouseDelta.X * scaleDelta;
                    if (width < 0)
                    {
                        ds.X     = data.StartRect.Left + width;
                        ds.Width = -width;
                    }
                    else
                    {
                        ds.Width = width;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.RightBottom:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds    = data.UI.DesignRect;
                    var width = data.StartRect.Width + mouseDelta.X * scaleDelta;
                    if (width < 0)
                    {
                        ds.X     = data.StartRect.Left + width;
                        ds.Width = -width;
                    }
                    else
                    {
                        ds.Width = width;
                    }
                    var height = data.StartRect.Height + mouseDelta.Y * scaleDelta;
                    if (height < 0)
                    {
                        ds.Y      = data.StartRect.Top + height;
                        ds.Height = -height;
                    }
                    else
                    {
                        ds.Height = height;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.Bottom:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds     = data.UI.DesignRect;
                    var height = data.StartRect.Height + mouseDelta.Y * scaleDelta;
                    if (height < 0)
                    {
                        ds.Y      = data.StartRect.Top + height;
                        ds.Height = -height;
                    }
                    else
                    {
                        ds.Height = height;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;

            case enTransformOPHandleType.LeftBottom:
            {
                //foreach (var data in mSelectedUIDatas.Values)
                {
                    var ds    = data.UI.DesignRect;
                    var width = data.StartRect.Width - mouseDelta.X * scaleDelta;
                    if (width < 0)
                    {
                        ds.Width = -width;
                    }
                    else
                    {
                        ds.X     = data.StartRect.X + mouseDelta.X * scaleDelta;
                        ds.Width = width;
                    }
                    var height = data.StartRect.Height + mouseDelta.Y * scaleDelta;
                    if (height < 0)
                    {
                        ds.Y      = data.StartRect.Top + height;
                        ds.Height = -height;
                    }
                    else
                    {
                        ds.Height = height;
                    }
                    if (data.UI.Slot != null)
                    {
                        data.UI.Slot.ProcessSetContentDesignRect(ref ds);
                    }
                    else
                    {
                        data.UI.SetDesignRect(ref ds);
                    }
                }
            }
            break;
            }
        }
        void OperationAnchorsHandle(EngineNS.UISystem.Editor.SelectedData operationUIData, ref EngineNS.Vector2 mouseDelta, float scaleDelta)
        {
            if (mSelectedAnchorHandleType == enCanvasAnchors.Unknow)
            {
                return;
            }

            var anchorOp = operationUIData.UI.Slot as EngineNS.UISystem.Controls.Containers.CanvasSlot;

            if (anchorOp == null)
            {
                return;
            }
            var parent        = operationUIData.UI.Parent;
            var parentWidth   = parent.DesignRect.Width;
            var parentHeight  = parent.DesignRect.Height;
            var handle        = mCanvasAnchorsHandles[(int)mSelectedAnchorHandleType];
            var tagDesignRect = operationUIData.UI.DesignRect;

            switch (mSelectedAnchorHandleType)
            {
            case enCanvasAnchors.Left:
            {
                var newMinX = handle.StartMin.X + (mouseDelta.X * scaleDelta) / parentWidth;
                newMinX          = GetValidValue(newMinX, 0.0f, anchorOp.Maximum.X);
                anchorOp.Minimum = new EngineNS.Vector2(newMinX, anchorOp.Minimum.Y);
            }
            break;

            case enCanvasAnchors.Right:
            {
                var newMaxX = handle.StartMax.X + (mouseDelta.X * scaleDelta) / parentWidth;
                newMaxX          = GetValidValue(newMaxX, anchorOp.Minimum.X, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(newMaxX, anchorOp.Maximum.Y);
            }
            break;

            case enCanvasAnchors.Top:
            {
                var newMinY = handle.StartMin.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                newMinY          = GetValidValue(newMinY, 0.0f, anchorOp.Maximum.Y);
                anchorOp.Minimum = new EngineNS.Vector2(anchorOp.Minimum.X, newMinY);
            }
            break;

            case enCanvasAnchors.Bottom:
            {
                var newMaxY = handle.StartMax.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                newMaxY          = GetValidValue(newMaxY, anchorOp.Minimum.Y, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(anchorOp.Maximum.X, newMaxY);
            }
            break;

            case enCanvasAnchors.LeftTop:
            {
                var newMinX = handle.StartMin.X + (mouseDelta.X * scaleDelta) / parentWidth;
                newMinX          = GetValidValue(newMinX, 0.0f, anchorOp.Maximum.X);
                anchorOp.Minimum = new EngineNS.Vector2(newMinX, anchorOp.Minimum.Y);

                var newMinY = handle.StartMin.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                newMinY          = GetValidValue(newMinY, 0.0f, anchorOp.Maximum.Y);
                anchorOp.Minimum = new EngineNS.Vector2(anchorOp.Minimum.X, newMinY);
            }
            break;

            case enCanvasAnchors.RightTop:
            {
                var newMaxX = handle.StartMax.X + (mouseDelta.X * scaleDelta) / parentWidth;
                newMaxX          = GetValidValue(newMaxX, anchorOp.Minimum.X, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(newMaxX, anchorOp.Maximum.Y);

                var newMinY = handle.StartMin.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                newMinY          = GetValidValue(newMinY, 0.0f, anchorOp.Maximum.Y);
                anchorOp.Minimum = new EngineNS.Vector2(anchorOp.Minimum.X, newMinY);
            }
            break;

            case enCanvasAnchors.LeftBottom:
            {
                var newMinX = handle.StartMin.X + (mouseDelta.X * scaleDelta) / parentWidth;
                newMinX          = GetValidValue(newMinX, 0.0f, anchorOp.Maximum.X);
                anchorOp.Minimum = new EngineNS.Vector2(newMinX, anchorOp.Minimum.Y);

                var newMaxY = handle.StartMax.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                newMaxY          = GetValidValue(newMaxY, anchorOp.Minimum.Y, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(anchorOp.Maximum.X, newMaxY);
            }
            break;

            case enCanvasAnchors.RightBottom:
            {
                var newMaxX = handle.StartMax.X + (mouseDelta.X * scaleDelta) / parentWidth;
                newMaxX          = GetValidValue(newMaxX, anchorOp.Minimum.X, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(newMaxX, anchorOp.Maximum.Y);

                var newMaxY = handle.StartMax.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                newMaxY          = GetValidValue(newMaxY, anchorOp.Minimum.Y, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(anchorOp.Maximum.X, newMaxY);
            }
            break;

            case enCanvasAnchors.Center:
            {
                var valX = handle.StartMin.X + (mouseDelta.X * scaleDelta) / parentWidth;
                valX = GetValidValue(valX, 0.0f, 1.0f);
                var valY = handle.StartMin.Y + (mouseDelta.Y * scaleDelta) / parentHeight;
                valY             = GetValidValue(valY, 0.0f, 1.0f);
                anchorOp.Maximum = new EngineNS.Vector2(float.MaxValue, float.MaxValue);
                anchorOp.Minimum = new EngineNS.Vector2(valX, valY);
                anchorOp.Maximum = anchorOp.Minimum;
            }
            break;
            }
            anchorOp.ProcessSetContentDesignRect(ref tagDesignRect);
        }
        void UpdateTransformOperationAssistShow(EngineNS.UISystem.Editor.SelectedData operationUIData)
        {
            if (operationUIData != null)
            {
                var selectRect = operationUIData.ShowRect.DesignRect;

                for (int i = 0; i < (int)enTransformOPHandleType.Count; i++)
                {
                    var handle = mTransformHandles[i];
                    if (handle == null)
                    {
                        continue;
                    }
                    handle.Show.Visibility = EngineNS.UISystem.Visibility.Visible;
                    var handleRect = handle.SrcRect;
                    var drawWidth  = handleRect.Width;
                    var drawHeight = handleRect.Height;
                    var newRect    = new EngineNS.RectangleF(0, 0, drawWidth, drawHeight);
                    switch ((enTransformOPHandleType)i)
                    {
                    case enTransformOPHandleType.LeftTop:
                        newRect.X = selectRect.X - drawWidth;
                        newRect.Y = selectRect.Y - drawHeight;
                        break;

                    case enTransformOPHandleType.Top:
                        newRect.X = selectRect.X + selectRect.Width * 0.5f - drawWidth * 0.5f;
                        newRect.Y = selectRect.Y - drawHeight;
                        break;

                    case enTransformOPHandleType.RightTop:
                        newRect.X = selectRect.X + selectRect.Width;
                        newRect.Y = selectRect.Y - drawHeight;
                        break;

                    case enTransformOPHandleType.Right:
                        newRect.X = selectRect.X + selectRect.Width;
                        newRect.Y = selectRect.Y + selectRect.Height * 0.5f - drawHeight * 0.5f;
                        break;

                    case enTransformOPHandleType.RightBottom:
                        newRect.X = selectRect.X + selectRect.Width;
                        newRect.Y = selectRect.Y + selectRect.Height;
                        break;

                    case enTransformOPHandleType.Bottom:
                        newRect.X = selectRect.X + selectRect.Width * 0.5f - drawWidth * 0.5f;
                        newRect.Y = selectRect.Y + selectRect.Height;
                        break;

                    case enTransformOPHandleType.LeftBottom:
                        newRect.X = selectRect.X - drawWidth;
                        newRect.Y = selectRect.Y + selectRect.Height;
                        break;

                    case enTransformOPHandleType.Left:
                        newRect.X = selectRect.X - drawWidth;
                        newRect.Y = selectRect.Y + selectRect.Height * 0.5f - drawHeight * 0.5f;
                        break;
                    }
                    handle.Show.SetDesignRect(ref newRect, true);
                }
            }
            else
            {
                for (int i = 0; i < (int)enTransformOPHandleType.Count; i++)
                {
                    if (mTransformHandles[i] == null)
                    {
                        continue;
                    }
                    mTransformHandles[i].Show.Visibility = EngineNS.UISystem.Visibility.Collapsed;
                }
            }
        }
        void UpdateCanvasAnchorsHandlesShow(EngineNS.UISystem.Editor.SelectedData operationUIData, ref EngineNS.RectangleF windowDesignSize, ref EngineNS.RectangleF windowDrawSize)
        {
            foreach (var handle in mCanvasAnchorsHandles)
            {
                if (handle == null)
                {
                    continue;
                }
                handle.Show.Visibility = EngineNS.UISystem.Visibility.Collapsed;
            }
            if (operationUIData != null)
            {
                var anchorOp = operationUIData.UI.Slot as EngineNS.UISystem.Controls.Containers.CanvasSlot;
                if (anchorOp == null)
                {
                    return;
                }
                var canvas = operationUIData.UI.Parent as EngineNS.UISystem.Controls.Containers.CanvasPanel;
                if (canvas == null)
                {
                    return;
                }

                if (anchorOp.Maximum.Equals(anchorOp.Minimum))
                {
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Center].Show.Visibility = EngineNS.UISystem.Visibility.Visible;
                }
                else
                {
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Center].Show.Visibility = EngineNS.UISystem.Visibility.Collapsed;
                }
                if (anchorOp.Maximum.X == anchorOp.Minimum.X)
                {
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Top].Show.Visibility    = EngineNS.UISystem.Visibility.Visible;
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Bottom].Show.Visibility = EngineNS.UISystem.Visibility.Visible;
                }
                else
                {
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Top].Show.Visibility    = EngineNS.UISystem.Visibility.Collapsed;
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Bottom].Show.Visibility = EngineNS.UISystem.Visibility.Collapsed;
                }
                if (anchorOp.Maximum.Y == anchorOp.Minimum.Y)
                {
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Left].Show.Visibility  = EngineNS.UISystem.Visibility.Visible;
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Right].Show.Visibility = EngineNS.UISystem.Visibility.Visible;
                }
                else
                {
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Left].Show.Visibility  = EngineNS.UISystem.Visibility.Collapsed;
                    mCanvasAnchorsHandles[(int)enCanvasAnchors.Right].Show.Visibility = EngineNS.UISystem.Visibility.Collapsed;
                }
                mCanvasAnchorsHandles[(int)enCanvasAnchors.LeftTop].Show.Visibility     = EngineNS.UISystem.Visibility.Visible;
                mCanvasAnchorsHandles[(int)enCanvasAnchors.RightTop].Show.Visibility    = EngineNS.UISystem.Visibility.Visible;
                mCanvasAnchorsHandles[(int)enCanvasAnchors.RightBottom].Show.Visibility = EngineNS.UISystem.Visibility.Visible;
                mCanvasAnchorsHandles[(int)enCanvasAnchors.LeftBottom].Show.Visibility  = EngineNS.UISystem.Visibility.Visible;

                var canvasRect  = canvas.DesignRect;
                var leftDelta   = canvasRect.X / windowDesignSize.Width;
                var topDelta    = canvasRect.Y / windowDesignSize.Height;
                var widthDelta  = canvasRect.Width / windowDesignSize.Width;
                var heightDelta = canvasRect.Height / windowDesignSize.Height;
                canvasRect = new EngineNS.RectangleF(windowDrawSize.Width * leftDelta + windowDrawSize.Left,
                                                     windowDrawSize.Height * topDelta + windowDrawSize.Top,
                                                     windowDrawSize.Width * widthDelta,
                                                     windowDrawSize.Height * heightDelta);

                var showRect = new EngineNS.RectangleF();

                showRect.X      = anchorOp.Minimum.X * canvasRect.Width + canvasRect.Left;
                showRect.Y      = anchorOp.Minimum.Y * canvasRect.Height + canvasRect.Top;
                showRect.Width  = (anchorOp.Maximum.X - anchorOp.Minimum.X) * canvasRect.Width;
                showRect.Height = (anchorOp.Maximum.Y - anchorOp.Minimum.Y) * canvasRect.Height;

                for (int i = 0; i < (int)enCanvasAnchors.Count; i++)
                {
                    var handle = mCanvasAnchorsHandles[i];
                    if (handle == null || handle.Show.Visibility == EngineNS.UISystem.Visibility.Collapsed)
                    {
                        continue;
                    }

                    var handleRect = handle.SrcRect;
                    var drawWidth  = handleRect.Width;
                    var drawHeight = handleRect.Height;
                    var newRect    = new EngineNS.RectangleF(0, 0, drawWidth, drawHeight);
                    switch ((enCanvasAnchors)i)
                    {
                    case enCanvasAnchors.Center:
                        newRect.X = showRect.X - drawWidth * 0.5f;
                        newRect.Y = showRect.Y - drawHeight * 0.5f;
                        break;

                    case enCanvasAnchors.Top:
                        newRect.X = showRect.X + showRect.Width * 0.5f - drawWidth * 0.5f;
                        newRect.Y = showRect.Y - drawHeight;
                        break;

                    case enCanvasAnchors.RightTop:
                        newRect.X = showRect.X + showRect.Width;
                        newRect.Y = showRect.Y - drawHeight;
                        break;

                    case enCanvasAnchors.Right:
                        newRect.X = showRect.X + showRect.Width;
                        newRect.Y = showRect.Y + showRect.Height * 0.5f - drawHeight * 0.5f;
                        break;

                    case enCanvasAnchors.RightBottom:
                        newRect.X = showRect.X + showRect.Width;
                        newRect.Y = showRect.Y + showRect.Height;
                        break;

                    case enCanvasAnchors.Bottom:
                        newRect.X = showRect.X + showRect.Width * 0.5f - drawWidth * 0.5f;
                        newRect.Y = showRect.Y + showRect.Height;
                        break;

                    case enCanvasAnchors.LeftBottom:
                        newRect.X = showRect.X - drawWidth;
                        newRect.Y = showRect.Y + showRect.Height;
                        break;

                    case enCanvasAnchors.Left:
                        newRect.X = showRect.X - drawWidth;
                        newRect.Y = showRect.Y + showRect.Height * 0.5f - drawHeight * 0.5f;
                        break;

                    case enCanvasAnchors.LeftTop:
                        newRect.X = showRect.X - drawWidth;
                        newRect.Y = showRect.Y - drawHeight;
                        break;
                    }
                    handle.Show.SetDesignRect(ref newRect, true);
                }
            }
        }