【发布时间】:2012-08-12 22:56:15
【问题描述】:
我正在使用 Visual Studio 2010 创建一个小型 WPF 应用程序。我创建了一个用户控件,我现在正尝试将它添加到我的主窗体中。用户控件确实显示在工具箱中,但每次我尝试将控件拖动到表单时都会出现错误:
枚举数无效,因为集合已更改。
我应该知道出了什么问题,但我无法弄清楚这件事让我烦恼。
【问题讨论】:
标签: wpf visual-studio-2010 user-controls
我正在使用 Visual Studio 2010 创建一个小型 WPF 应用程序。我创建了一个用户控件,我现在正尝试将它添加到我的主窗体中。用户控件确实显示在工具箱中,但每次我尝试将控件拖动到表单时都会出现错误:
枚举数无效,因为集合已更改。
我应该知道出了什么问题,但我无法弄清楚这件事让我烦恼。
【问题讨论】:
标签: wpf visual-studio-2010 user-controls
您在用户控件的构造函数中存在错误 - 您在 IEnumerable 上使用了 foreach 循环,并且在循环运行时,IEnumerable 被更改,这在 foreach 循环中是不允许的。如果您正在操作您正在迭代的集合,请改用 for 循环。
【讨论】:
这里的问题是你不知道是什么代码抛出了异常。
WPF 对异常的处理很糟糕,尤其是在构造函数中。该框架坚持捕获并重新抛出一个新异常,通常是多次,并且很难找到原始堆栈跟踪。我发现追踪此类错误的最简单方法是在抛出异常后立即告诉 Visual Studio 停止,而不是等到 WPF 重新抛出它几次并让细节难以挖掘出去。
我面前没有 Visual Studio 2010,但下面是在 VS2008 中执行此操作的方法——2010 可能类似:
然后再次调试您的应用。它将停在实际导致问题的线路上,并且您会更容易看到发生了什么。如果你仍然不确定它为什么会抛出异常,你可以发布一个代码示例。
【讨论】:
为了使用户控件正常运行,您需要有一个带零参数的构造函数。这样,表单设计者就有办法以“默认”方式呈现控件。
然后,我重载了构造函数以获取正确运行控件所需的参数,并且一切都按预期工作。
【讨论】:
你需要:
【讨论】: