为什么控件填充不会影响停靠控件的布局

本文关键字:控件 停靠 布局 影响 填充 为什么 | 更新日期: 2023-09-27 18:33:11

当具有 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属性。

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

注意:我正在运行带有 .NET 4.5 的 VS11。这可能是问题所在,但我无法在另一个版本或平台上测试它以确定。

谢谢布兰登

为什么控件填充不会影响停靠控件的布局

容器控件应派生自 ContainerControl 类。 这给了它许多"像容器一样行动"的行为。 包括观察填充属性。