【发布时间】:2012-10-11 18:12:49
【问题描述】:
我正在扩展我自己的自定义控件,它扩展了 UserControl 类。
我可以在扩展类的设计器中看到所有元素都很好,但是扩展自定义控件的所有属性都显示为禁用,并且当用鼠标选择其元素时会出现“锁定”图标。
我该如何解决这个问题?我希望能够从设计器中修改这些属性。
编辑:自定义控件的定义,从 UserControl 扩展而来。
namespace Wizard
{
[Designer(typeof(Wizard.StepDesigner))]
[DefaultProperty("TitlePanel, NavigationPanel")]
public partial class Step : UserControl
{
public Step()
{
InitializeComponent();
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Title TitlePanel
{
get
{
return this.title1;
}
set
{
this.title1 = value;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel ContentPanel
{
get
{
return this.contentPanel;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Navigation NavigationPanel
{
get
{
return this.navigation1;
}
}
}
internal class StepDesigner : ParentControlDesigner
{
public override void Initialize(System.ComponentModel.IComponent component)
{
base.Initialize(component);
if (this.Control is Step)
{
Step control = (Step)this.Control;
this.EnableDesignMode(control.TitlePanel, "TitlePanel");
this.EnableDesignMode(control.ContentPanel, "ContentPanel");
this.EnableDesignMode(control.NavigationPanel, "NavigationPanel");
}
}
}
}
【问题讨论】:
-
它们的修饰符是受保护的还是公开的?
-
请发布其中一两个属性的属性定义。
-
我修改了问题。
-
一旦控件的无参数构造函数运行后,这些属性中的每一个的支持字段是否都有值?另外,如果您希望
Content对其进行序列化,为什么还要为Title设置setter?此类属性通常是只读的(就像您的其他Content属性一样) -
我刚刚设法解决了我的问题。正如@HenkHolterman 指出的那样,他们的修饰符是私人的,但是当我回答时我误解了他的问题。更正有关“标题”字段的备注。