0

我正在努力使用 UserControl。我有一个代表 Pager 的 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 的窗口时,Visual Studio 都会修改 Windows 设计器代码。所以,一旦我打开它,VS就问我是否要保存它......当然,如果我向窗口添加一个控件,它不会保留更改......只要我删除UserControl Pager 问题消失了......我应该如何以正确的方式解决这个问题?我只是不希望在设计时初始化演示者属性,因为它是在运行时注入的......

4

2 回答 2

0

当 VS 尝试生成设计器代码时,您可能会遇到异常。

将 VS 的第二个副本附加到设计器,打开 Break On Exceptions,看看发生了什么。

于 2010-12-21T13:55:27.903 回答
0

因此,包含 UserControl 的 Windows 窗体的设计器会抛出异常:

此错误的实例 (1)

  1. Infrastructure.BaseModule.MYWindow.Designer.cs 行:108 列:1 隐藏调用堆栈

在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design .Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)

于 2010-12-21T14:38:05.807 回答