Ejemplo n.º 1
0
        /// <summary>
        /// 拖拽过程中计算在当前Tabs中的可停靠区域
        /// </summary>
        /// <param name="p_dockPos"></param>
        /// <param name="p_dockItem"></param>
        /// <returns></returns>
        internal Rect GetRectDimenstion(DockPosition p_dockPos, Pane p_dockItem)
        {
            Point topLeft    = new Point();
            Size  parentSize = Size.Empty;
            Size  size       = new Size(0.0, 0.0);
            bool  isHor      = false;

            if (OwnWinItem != null)
            {
                parentSize = OwnWinItem.RenderSize;
                isHor      = OwnWinItem.Orientation == Orientation.Horizontal;
                RelativeSizes sumOfSizes = OwnWinItem.GetSumOfRelativeSizes();

                if (isHor)
                {
                    sumOfSizes.LengthSum     += p_dockItem.InitWidth;
                    sumOfSizes.WithoutChange += p_dockItem.InitWidth;
                    size.Width = sumOfSizes.LengthSum;
                }
                else
                {
                    sumOfSizes.LengthSum     += p_dockItem.InitHeight;
                    sumOfSizes.WithoutChange += p_dockItem.InitHeight;
                    size.Height = sumOfSizes.LengthSum;
                }

                size    = GetSize(p_dockPos, sumOfSizes, parentSize, new Size(p_dockItem.InitWidth, p_dockItem.InitHeight));
                topLeft = GetTopLeft(p_dockPos, sumOfSizes, parentSize, size);
            }
            return(new Rect(topLeft, size));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 将目标Pane的项停靠,合并到当前Tabs或停靠在一边
        /// </summary>
        /// <param name="p_winItem"></param>
        /// <param name="p_dockPosition"></param>
        public void AddItem(Pane p_winItem, DockPosition p_dockPosition)
        {
            if (p_winItem == null)
            {
                return;
            }

            if (p_dockPosition == DockPosition.Center)
            {
                // 停靠在中部,合并Pane中的所有标签项
                var ls = GetAllChildTab(p_winItem);
                LayoutManager.ClearItems(p_winItem);
                foreach (Tab item in ls)
                {
                    Items.Add(item);
                }
            }
            else
            {
                // 停靠在当前Tabs的一边
                OwnWinItem.AddItem(p_winItem, p_dockPosition, this);
                p_winItem.RemoveUnused();
            }
        }