另一个奇怪的WPF错误:
我在一个简单的XAML页面中有一个自定义控件。该项目构建和运行完美,没有错误。
这是XAML:
<Window x:Class="Grapher2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:graph="clr-namespace:Grapher2"
Title="Grapher" Width="800" Height="600">
<StackPanel Name="container" Width="700" Height="500">
<graph:GraphCanvas x:Name="graphCanvas" Width="700" Height="500" Background="#ddd" />
</StackPanel>
但是当我尝试在XAML设计器窗口中查看XAML页面时,我收到了消息:
“问题加载 - 文档包含必须修复的错误......”
当我点击“重新加载设计器”链接时,错误列表中会弹出一个错误:
“对象引用未设置为对象的实例”
以“graph:GraphCanvas ...”开头的行标有下划线。
我最初是在我们的开发服务器上开发的,在那里,一切都是一样的,除了错误是:
“请求类型'System.Security.Permissions.SecurityPermission的许可(......等等......失败了。)”
同样,一切都很完美,除了我无法在XAML设计器窗口中查看页面,这使我无法开发应用程序的其余部分。
我尝试过清理,构建,重建以及这些命令的所有命令组合,但没有成功。
修改
请记住这是我的第一个自定义控件,我可能会做一些可怕的,可怕的错误。就像我说的,该应用程序编译和工作精美,所以我有点神秘。
编辑#2:
我的派生画布不是部分类。根据我对InitializeComponent
工作原理(What does InitializeComponent() do, and how does it work in WPF?)的理解,没有自动生成的包含InitializeComponent
链接到我的控件的部分类。同样,除了破坏XAML设计视图外,控件在没有它的情况下完美运行。
答案 0 :(得分:3)
我最近遇到过类似的问题。基本上我的理解是,在设计器中,某些事情的发生顺序与运行时的顺序不完全相同,并且在设计时,您认为永远不会为null的某些事实上是空的。
我用这种方式解决了问题:在我的控制中注释了大部分代码,以至于Cider中没有错误,然后取消注释它们,直到我再次收到错误。然后,当错误的来源被定位时,我用
包围了有问题的部分if (something != null)
{
...
}
即使我觉得没有办法可以无效。过了一段时间我摆脱了错误。
不是非常“科学”的方法,但它解决了我的问题。 :)
答案 1 :(得分:0)
不幸的是,Visual Studio 2008中的Cider设计器存在问题,这种类型的错误太常见了。 VS2010中的版本有了很大的改进,但是当你在VS2008中遇到这个问题时,这并不舒服。
答案 2 :(得分:0)
我不确定“Grapher2”是什么,但您可以检查以确保其构造函数中没有代码在设计器实例化时无法正确运行。像数据库调用之类的东西会有问题。
答案 3 :(得分:0)
我见过类似的问题。
这只是一个部分解决方案,因为它不会在设计模式下在父级中呈现,但它将消除错误。这是迄今为止我能找到的最佳解决方案。
在自定义控件的构造函数中。
if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
InitializeComponent();
希望有所帮助,或者它可以帮助您找到更好的解决方案。如果你这样做请发布,以便我可以使用它;)
修改的
不使用上面的代码时,我得到一个不同的错误:
无法创建类型为''
所以可能是一个与我见过的不同的问题,但听起来可能是相关的。