我正在努力使用UserControl。我有一个代表寻呼机的UserControl,它有一个以这种方式暴露的Presenter对象属性:
[Browsable(false)]
[DesignSerializationAttribute(DesignSerializationAttribute.Hidden)]
public object Presenter { get; set; }
代码本身可以工作,因为我可以将控件拖放到Windows From中而无需Visual Studio初始化此属性。 现在,因为在此控件的Load事件中,我调用Presenter的一个方法,在运行时为null ...我已经介绍了这个额外的代码:
public override void OnLoad(...)
{
if (this.DesignMode)
{
base.OnLoad(e);
return;
}
presenter.OnViewReady();
}
现在,每次打开包含此UserControl的Window时,Visual Studio都会修改Windows设计器代码。所以,一旦我打开它,VS问我是否要保存它...当然,如果我向Window添加一个控件,它不会保留更改......一旦我删除了UserControl寻呼机问题消失了...... 我该如何以正确的方式解决这个问题?我只是不希望presenter属性在设计时被初始化,因为它是在运行时注入的......
答案 0 :(得分:0)
当VS尝试生成设计器代码时,您可能会遇到异常。
将VS的第二个副本附加到设计器,打开Break On Exceptions,看看发生了什么。
答案 1 :(得分:0)
因此,包含UserControl的Windows窗体的Designer抛出异常:
此错误的实例(1)
在System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager,String exceptionText,String helpLink) 在System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager,String name,CodeExpression expression) 在System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager,String name,CodeExpression expression) 在System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager,CodeStatement statement)