【发布时间】:2011-05-28 20:20:30
【问题描述】:
我正在努力使用 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 问题消失了... 我应该如何以正确的方式解决这个问题?我只是不希望在设计时初始化演示者属性,因为它是在运行时注入的......
【问题讨论】:
-
如果您不在设计模式下,您是否知道您没有调用
base.OnLoad?这是故意的吗? -
设计器文件有什么变化?
-
是的,别担心,代码调用 base.OnLoad(e) 如果不是在设计时,我跳过这里向您展示仅在运行时调用演示者,但是问题是不同的......
-
没有什么真正改变,但我所做的改变在我保存时被吹走了......
-
属性的第二个属性是废话。请务必从您的源代码中复制/粘贴。
标签: c# design-time