18

在我的 UI XAML 中,我本质上是从包含多个表单共有的功能的类“BaseView”继承的,但这会阻止设计器显示表单:“无法创建 BaseView 类型的实例”。代码将编译并运行,但无法在 Designer 中看到表单令人沮丧。有没有更好的办法?谢谢。

XAML:

<vw:BaseView 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vw="clr-namespace:ReviewClient"   
    x:Class="ReviewClient.MainPage"

...

4

11 回答 11

21

问题是基类被定义为抽象的。这导致设计者失败。这个问题在 Laurent Bugnion 博客的评论部分有更详细的描述:http: //geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx

于 2009-05-18T00:00:46.207 回答
9

我在以下网址找到了一个非常有用的解决方案:http: //www.progware.org/Blog/post/WPF-Designer-Error-Could-not-create-an-instance-of-type.aspx

此链接说明 WPF 设计器窗口如何运行构造函数以在 XAML 中显示 UI 和补救措施:将以下代码段添加到可能会出错的构造函数代码的任何部分:

if(!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
   //code producing exception         
}

函数名称是不言自明的。:) 此链接还提供有关 XAML 调试问题的解决方案。

于 2013-01-29T12:08:54.417 回答
4

另一个可能的原因,正如我们刚刚在此处发现的,所以我为未来的用户添加了这个答案,是项目是否托管在不受信任的源上,例如文件服务器。

在这种情况下,设计人员不会加载程序集,因此给出了相同的“无法创建实例...”错误。该解决方案仍然可以构建和调试。

于 2010-01-04T05:45:24.247 回答
2

另一个原因。我的控件类有一个从资源初始化的静态字段,如下所示:

 static Color s_ImgColor = (Color)TheApp.Resources["PhoneForegroundColor"];

这将在 XAML 编辑器中引发空引用异常,因为资源在设计模式下不可用。如果它不是颜色资源(比如画笔),这不会是问题,但是类型转换为值类型会在空引用上抛出。

于 2012-03-02T19:56:40.613 回答
1

还有一个可能的原因。

我有一个用户控件,它具有生成事件的子控件,例如列表控件上的 selection_changed。select_changed 事件处理程序对其他子控件进行更改。

在初始化期间,列表框的选定项属性被更改并触发 selection_changed 事件。处理程序尝试更新其他子控件但不能因为它们尚未被实例化。这会导致空指针异常并导致问题。

一旦处理了空指针问题,控件就能够被实例化并出现在父控件中。

于 2010-05-25T09:02:40.350 回答
0

我的问题是我的 MVVM 类可以访问构造函数中的数据库,这就是问题所在,它引发了异常。我只需要检查应用程序是否在设计模式下运行。

于 2010-10-27T06:18:09.250 回答
0

在 WinForms 中,如果您使用自定义TypeDescriptionProvider通知设计器具体实现,则可以将设计器与抽象控件一起使用:

我在另一个问题的答案中使用了解决方案,该问题链接了这篇文章。本文建议使用TypeDescriptionProvider抽象类的自定义和具体实现。设计者将询问自定义提供者要使用哪些类型,并且您的代码可以返回具体类,以便设计者在您完全控制抽象类如何显示为具体类时感到高兴。

于 2012-09-14T10:10:58.850 回答
0

还有另一种可能的情况(这对于 WP 至少 SL 来说是实际的):

如果您创建类的实例(例如<local:MyDataSource />),那么它应该是 public。如果您的类是内部的,它将在设计时工作,但在运行时会因此异常而失败。

于 2013-05-28T18:43:18.513 回答
0

我收到此错误的原因很简单,但对我来说很难找到。我的转换器类不公开。只需更改类的可访问性即可修复它。

    public class StringToLowerConverter : IValueConverter
于 2013-08-02T20:38:02.270 回答
0

我不知道问题是什么,但我是这样解决的:

您不应该在 BaseClass 的构造函数中执行代码,而是从父类的构造函数执行代码。

您在从父类的构造函数执行的 BaseClass 中创建一个方法。

于 2020-06-13T18:17:49.603 回答
0

在此处输入图像描述

耶!我解决了。在我将“控制显示选项”设置为“仅显示平台控制”后,表单最终显示在“显示和错误消失”上。查看图像以找到它。

于 2020-11-29T18:13:14.423 回答