现在的位置: 首页 > 综合 > 正文

使SandDock的多个浮动面板以Tab页形式显示-补遗

2018年05月27日 ⁄ 综合 ⁄ 共 1764字 ⁄ 字号 评论关闭

根据以前的实践,这个功能已完成(标题), 点这里,但在复杂情况下上面的做法就会出现不稳定,比如说点击以后完成联动的操作

下面是自己在调试程序的时候摸索出来的方法,控件的官方资料少的可怜,无奈!!!

下文的对象sandDockManager就是SandDockManager控件的对象

            //得到上下左右四个方向的Pad容器
            var rightContainer = sandDockManager.FindDockContainer(TD.SandDock.ContainerDockLocation.Right);
            var leftContainer = sandDockManager.FindDockContainer(TD.SandDock.ContainerDockLocation.Left);
            var topConttainer = sandDockManager.FindDockContainer(TD.SandDock.ContainerDockLocation.Top);
            var bottomConttainer = sandDockManager.FindDockContainer(TD.SandDock.ContainerDockLocation.Bottom);
            MergeDockControls(rightContainer, window);
            MergeDockControls(leftContainer, window);
            MergeDockControls(topConttainer, window);
            MergeDockControls(bottomConttainer, window);

        private static void MergeDockControls(DockContainer container, DockableWindow window)
        {
            if (container != null && container.LayoutSystem.LayoutSystems.Count > 1)
            {
                var dockControlList = new List<DockControl>();
                foreach (LayoutSystemBase layoutSystem in container.LayoutSystem.LayoutSystems)
                {
                    var controlLayoutSystem = (ControlLayoutSystem) layoutSystem;
                    var controls = controlLayoutSystem.Controls;
                    foreach (DockControl dockControl in controls)
                    {
                        if (!dockControlList.Contains(dockControl))
                            dockControlList.Add(dockControl);
                    }
                }

                foreach (DockControl dockControl in dockControlList)
                {
                    var controlLayoutSystem = (ControlLayoutSystem) container.LayoutSystem.LayoutSystems[0];
                    if (!controlLayoutSystem.Controls.Contains(dockControl))
                        controlLayoutSystem.Controls.Add(dockControl);
                }

                for (int i = 0; i < container.LayoutSystem.LayoutSystems.Count; i++)
                {
                    LayoutSystemBase layoutSystem = container.LayoutSystem.LayoutSystems[i];
                    int index = container.LayoutSystem.LayoutSystems.IndexOf(layoutSystem);
                    if (index > 0)
                    {
                        container.LayoutSystem.LayoutSystems.Remove(layoutSystem);
                    }
                }
                ((ControlLayoutSystem) container.LayoutSystem.LayoutSystems[0]).SelectedControl = window;
            }
        }

抱歉!评论已关闭.