我有一个用户控件,可以充当其他控件的容器。我的容器非常简单,因为它只包含一个样式面板,其中包含一个TableLayoutPanel
来保存多个子控件:
MyContainerControl -> Panel -> TableLayoutPanel
现在我想启用设计器支持来嵌套控件。快速搜索显示这是可能的:
但是我的控件与示例中的控件略有不同。示例控件将子控件添加到面板,而我的控件将子控件添加到 TableLayoutPanel (这实际上是Panel的子类)。
我认为这不应该是一个很大的问题,并开始实施:
[Designer(typeof(ControlListPanel.Designer))]
public partial class ControlListPanel : UserControl
{
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TableLayoutPanel LayoutArea
{
get { return this.rootTableLayoutPanel; }
}
// ... more class content ...
public class Designer : ParentControlDesigner
{
public override void Initialize(System.ComponentModel.IComponent component)
{
base.Initialize(component);
if (this.Control is ControlListPanel)
{
this.EnableDesignMode(((ControlListPanel)this.Control).LayoutArea, "LayoutArea");
}
}
}
}
现在我可以将控件拖放到我的用户控件上,但查看设计器文件会显示控件已添加到用户控件本身:
this.controlListPanel1.Controls.Add(this.myChildControl);
我希望将它添加到表格布局中:
this.controlListPanel1.LayoutArea.Controls.Add(this.myChildControl);
当我按如下方式更改LayoutArea
属性时,设计师会按照我的预期执行操作,并将子控件添加到LayoutArea
属性中:
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel LayoutArea
{
get { return this.panel; }
}
(我返回面板而不是表格布局)
我有什么遗失的吗?为什么设计师不想将我的子控件添加到TableLayoutPanel
?