1

当一个控件Dock = DockStyle.Fill是具有任何填充集的另一个控件的子控件时,停靠控件完全忽略容器控件的填充。如果容器控件是 UserControl 类型的子类,则不会发生这种情况。

例如,考虑以下两个类。

[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public class Container : Control
{
    public Container()
    {
        Dock = DockStyle.Fill;
        Padding = new Padding(30, 30, 30, 30);
        BackColor = Color.Blue;
        Controls.Add(new Contained());
    }
}

public class Contained : Control
{
    public Contained()
    {
        Dock = DockStyle.Fill;
        BackColor = Color.White;
    }
}

DesignerAttribute只是用作设计人员的辅助工具。除非您将Container控件更改为继承自UserControl,否则Contained控件将不符合Container控件的Padding属性。

为什么是这样?我是否必须使用 UserControl 才能将另一个控件停靠在具有自定义填充的自定义控件中?

注意:我正在使用 .NET 4.5 运行 VS11。这可能是问题所在,但我无法在其他版本或平台上对其进行测试以确定。

谢谢,布兰登

4

1 回答 1

2

容器控件应派生自 ContainerControl 类。这给了它一些“像容器一样的行为”行为。包括观察 Padding 属性。

于 2012-05-05T09:04:40.513 回答