为什么Control.Padding不会影响停靠控件的布局?

时间:2012-05-05 03:43:10

标签: c# winforms

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。这可能是问题,但我不能在另一个版本或平台上测试它以确定。

谢谢, 布兰登

1 个答案:

答案 0 :(得分:2)

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