2012-05-05 36 views
1

当带有Dock = DockStyle.Fill的控件是带有任何填充集的另一个控件的子控件时,停靠控件完全忽略容器控件的填充。如果容器控件是UserControl类型的子类,则不会发生这种情况。为什么Control.Padding不会影响停靠控件的布局?

例如,考虑以下两个类。

[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控件将不符合控件的属性。

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

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

谢谢, 布兰登

+0

您真正的问题是“为什么?”或更好的解决方法?请参阅http://social.msdn.microsoft.com/Forums/en/winforms/thread/86ac4b22-a43a-4ef6-86ed-482596abf230 –

回答

2

的容器控制应该从一个ContainerControl类派生。这给了它一些“像容器一样行为”的行为。包括观察填充属性。

相关问题