C# Weifenlou船坞面板套件:使用其设计尺寸的浮动窗?

C# Weifenlou船坞面板套件:使用其设计尺寸的浮动窗?,c#,visual-studio-2010,dockpanel-suite,C#,Visual Studio 2010,Dockpanel Suite,如何使浮动窗口与Weifenlo Dock Panel套件一起使用其设计尺寸(而不是Dock Panel套件的默认尺寸) 提示:我在SF.net的Dock Panel Suite论坛上尝试了一个建议,但似乎不起作用。这对我很有效: var topLeft = dockPanel1.Location; topLeft.X += (dockPanel1.Size.Width / 2 - newForm.Size.Width / 2); topLeft.Y += (dockPanel1.Size.He

如何使浮动窗口与Weifenlo Dock Panel套件一起使用其设计尺寸(而不是Dock Panel套件的默认尺寸)

提示:我在SF.net的Dock Panel Suite论坛上尝试了一个建议,但似乎不起作用。

这对我很有效:

var topLeft = dockPanel1.Location;
topLeft.X += (dockPanel1.Size.Width / 2 - newForm.Size.Width / 2);
topLeft.Y += (dockPanel1.Size.Height / 2 - newForm.Size.Height / 2);
newForm.Show(dockPanel1, new Rectangle(topLeft, newForm.Size));

当CForm从DockContent派生时, 我在MDIContainerWindow中有一个方法,如下所示

 public void ShowForm(CForm pForm)
    {
        pForm.MdiParent = this;

        Size lS = pForm.Size;
        dockPanel.DefaultFloatWindowSize = lS;

        pForm.Show(dockPanel);
        pForm.VisibleState = DockState.Float;

    }

我自己在寻找答案时偶然发现了这个问题,发现提摩太的答案对我不起作用

问题是,他概述的方法在默认情况下也会浮动窗口。(可能是版本不同)

我用另一种方法解决了这个问题。我已经创建了一个基类,该基类从DockContent继承,我的所有文档窗口都将从该基类继承。然后,我为处理这个问题的Show方法创建了另一个重载(我使用DockPanelSuite源代码来帮助构建这个方法)

这对我有用(在VB中):


Chris的解决方案是目前最新的v3.0.2版本(可通过NuGet获得)对我有效的解决方案,只做了以下小修改:DockHandler.FloatPane=dockPanel.Theme.Extender.DockPaneFactory.CreateDockPane(这个,DockState.Float,false);
public void Show(DockPanel dockPanel, DockState dockState, Rectangle floatWindowBounds)
{
    Show(dockPanel, dockState); //shows the panel like normal

    //now for the part to initialize the float pane and size
    if (DockHandler.FloatPane == null)
    {
        DockHandler.FloatPane = dockPanel.DockPaneFactory.CreateDockPane(this, DockState.Float, false);
        DockHandler.FloatPane.FloatWindow.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
    }
    DockHandler.FloatPane.FloatWindow.Bounds = floatWindowBounds;
}
Dim MyForm As New MyForm
MyForm.Show(DockPanel, New Rectangle(MyForm.Location, MyForm.Size))
MyForm.DockState = DockState.DockRight