代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

WPF,设计器中的“对象引用未设置为对象实例”

  •  28
  • Sarah Vessels  · 技术社区  · 14 年前

    当我尝试为我的XAML重新加载设计器时,出现了一个“Object reference not set to an instance of a Object”错误 UserControl

    <local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
        Width="600" TemplateData="{Binding ElementName=cbo_templates,
                                   Path=SelectedItem.Data, Mode=OneWay}"/>
    

    TemplateDetail 是另一个 用户控件 . 当我看到 模板详细信息 ,它的设计器视图加载得很好,所以我认为没有问题。有一个 ComboBox 在我的XAML中 cbo_templates Template 类,它有一个 Data SelectedItem.Data ). 但是,如果我删除 .Data Path 路径 null . 这是我的 组合框 XAML以防万一:

    <ComboBox ItemsSource="{Binding Path=List}" Grid.Row="1" Grid.Column="3"
              VerticalAlignment="Center" x:Name="cbo_templates" Width="250"
              HorizontalAlignment="Left" DisplayMemberPath="Name"
              SelectedValuePath="Name" SelectedIndex="0"/>
    

    得到这个错误是一个真正的问题,因为设计视图不会加载,所以我看不到我的 用户控件 看起来好像没有运行应用程序。你知道怎么回事吗?它构建得很好,在构建输出中我没有看到任何绑定问题。

    编辑: 下面是这两个函数的构造函数代码 学生:

    “对象引用”错误:

    InitializeComponent();
    grd_templateList.DataContext = this; // refers to containing <Grid> in XAML
    

    建造师 用户控件 我正在尝试嵌入,设计视图加载正常的一个:

    InitializeComponent();
    grd_templateDetail.DataContext = this; // refers to containing <Grid> in XAML
    

    我试着放一个 if (null != grd_templateList) DataContext 属性,但这没有帮助--在重新加载设计器时仍然会出现“对象引用”错误。

    编辑: 这个 List 属性 组合框 用途是 DependencyProperty . 我在 Register 方法:

    public static readonly DependencyProperty ListProperty =
        DependencyProperty.Register(
            "List",
            typeof(List<Template>),
            typeof(TemplateList),
            new PropertyMetadata(
                new List<Template> { _defaultTemplate }
            )
        );
    

    即使我尝试初始化 列表 用户控件 ,在重新加载设计器时仍会出现错误。我不认为问题在于 列表 为null或 选择编辑项目数据 是条坏路。

    编辑: 好吧,即使这样也会导致我的设计器无法加载,出现“对象引用”错误:

    <local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
                          TemplateData="{Binding}"/>
    

    TemplateData

    编辑: Window 用户控件 他的设计视图给了我“对象引用”错误。欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧

    8 回复  |  直到 14 年前
        1
  •  35
  •   StayOnTarget Charlie Flowers    5 年前

    What Alex says 是一条路要走。但我觉得理解他说的话有点困惑。

    假设您在visualstudio中打开了项目,请打开另一个visualstudio实例并选择 调试->附加到进程 . 在打开的对话框中,选择

    • XDesProc.exe (这是XAML UI设计器)用于 VS2012及更新版本
    • devenv.exe 老年人VS 版本。

    然后对用户控件执行“reloaddesigner”,并查看第二个VS实例中的输出,以检查错误到底是什么。

        2
  •  11
  •   StayOnTarget Charlie Flowers    5 年前

    如果您在XAML中有“Object reference not set to an instance of an Object”,但您的应用程序编译并运行良好,您通常会发现其原因是构造函数中的某些内容在设计时无法解析。

    虽然您可以借助于这个问题的其他答案来找出问题的根源,但有时这是您无法简单地解决的问题,您需要在代码中完全按照您所拥有的那样使用它,但是您不希望看到这个错误。

    在这种情况下,只需单击位于设计器视图底部的“禁用项目代码”按钮,VisualStudioDesigner将停止尝试构造实例以提供设计时数据视图。

    看到了吗 here 有关详细信息。

    enter image description here

        3
  •  8
  •   Alex F    14 年前

    如果用户控件在设计时引发异常,则可以对其进行调试。为此,请在VisualStudio中使用此用户控件打开Dll项目。选择另一个VisualStudio实例作为可执行文件进行调试。开始调试。在第二个(已调试的)visualstudio实例中,使用客户端XAML页中的用户控件。这样,就可以在设计模式下调试用户控件。

        4
  •  8
  •   Crispy    14 年前

    它可能是用户控件的构造函数中的某些内容。VS2008 WPF设计器似乎对此有一些问题。

    在我们接手的一个项目中,我们补充说:

    if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
    {
        return;
    }
    

        5
  •  2
  •   BernardG    13 年前

    这个线程有点旧,但我有一个问题,我刚刚解决了它的帮助,所以我可以稍微澄清一些问题。

    1. 打开VS的第二个实例,菜单debug/attach to process/select devenv。 “在运行模式下无法显示反汇编。”
    2. 文件。如果有问题(我在用户控件上遇到异常,因此无法加载该窗口),调试器应该在第二个实例中指向有问题的代码。对我来说,这是非常重要的 清晰而明显。

        If System.ComponentModel.LicenseUsageMode.Runtime = 1 Then
            myObject = New ObjectDefinition
        End If
    

    效果非常好。

        6
  •  0
  •   juFo    9 年前

    在Visual Studio 2015 for WPF中:

    1. 稍等几秒钟,您将看到一个弹出窗口
    2. 选择“ 查看异常详细信息
    3. 此对话框将显示异常和

    希望这有帮助。

    如果在XAML上执行此操作,则只会看到异常,而不会看到带有“查看异常详细信息”的弹出窗口,因此需要在Designer/Design视图中执行此操作。

        7
  •  0
  •   astef    7 年前

    我给一个物体起了名字后就解决了这个问题。它是VS2015,我的标记不同,但它也可以帮助某些人:

    <ResourceDictionary>
        <DataTemplate x:Key="ThisKeySolvesDesignersNullRef" 
                        DataType="local:MyViewModel">
            <local:MyControl/>
        </DataTemplate>
    </ResourceDictionary>
    
        8
  •  0
  •   Shahin Dohan    7 年前

    今天在我的UWP代码中编辑了很多XAML之后,我出现了这个错误,我不知道是什么错了。。。但经过仔细检查,我发现我犯了一个错误:

    <Button Click="{Binding MyCommand}" />
    

    我错误地将命令分配给Click处理程序,这导致了一个空引用异常。。。更改Click to Command后,错误消失了。