[MSCE C#]如何实现MS的属性框类似的可停靠窗口?

老师好!

我想实现一个类似属性框一样的可停靠窗口,如下图所示:

我目前使用AttachAsGuiDockable与AttachToToolSettings这两个函数都不能生成对应的窗口。

1.使用AttachAsGuiDockable缺乏控制。

2.使用AttachToToolSettings可以实现类似效果,但是用其他工具时会把这个窗口冲掉。但是属性窗口(Properties不会被冲掉)

请问,怎么创建类似Properties窗口?

Parents
  • winform的窗体在停靠时确实会出现一些莫名其妙的状况,可以通过实现IGuiDockable接口来控制这些行为,窗体在停靠或者移动时会调用这个接口下的两个函数,在这两个函数里边可以配合着去控制窗体停靠时的行为,下面的代码是我以前写的窗体的一个例子,您可以参考一下:

    
            static private int width = 426;
            static private int height = 40;
            public bool GetDockedExtent(GuiDockPosition dockPosition, ref GuiDockExtent extentFlag, ref Size dockExtent)
            {
                if (dockPosition == GuiDockPosition.Left ||
                    dockPosition == GuiDockPosition.Right)
                {
                    extentFlag = GuiDockExtent.InvalidRegion;
                    return true;
                }
                dockExtent.Height = height;
                dockExtent.Width = width;
                extentFlag = GuiDockExtent.Specified;
                return true;
            }
    
            public bool WindowMoving(WindowMovingCorner corners, ref Size newSize)
            {
                newSize.Height = CommonDockSize.Height;
                newSize.Width = width;
                newSize.Height = height;
                return true;
            }

Reply
  • winform的窗体在停靠时确实会出现一些莫名其妙的状况,可以通过实现IGuiDockable接口来控制这些行为,窗体在停靠或者移动时会调用这个接口下的两个函数,在这两个函数里边可以配合着去控制窗体停靠时的行为,下面的代码是我以前写的窗体的一个例子,您可以参考一下:

    
            static private int width = 426;
            static private int height = 40;
            public bool GetDockedExtent(GuiDockPosition dockPosition, ref GuiDockExtent extentFlag, ref Size dockExtent)
            {
                if (dockPosition == GuiDockPosition.Left ||
                    dockPosition == GuiDockPosition.Right)
                {
                    extentFlag = GuiDockExtent.InvalidRegion;
                    return true;
                }
                dockExtent.Height = height;
                dockExtent.Width = width;
                extentFlag = GuiDockExtent.Specified;
                return true;
            }
    
            public bool WindowMoving(WindowMovingCorner corners, ref Size newSize)
            {
                newSize.Height = CommonDockSize.Height;
                newSize.Width = width;
                newSize.Height = height;
                return true;
            }

Children
No Data