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

s4chpxco  于 2022-11-18  发布在  其他
关注(0)|答案(9)|浏览(363)

当我尝试重新载入XAML UserControl的设计工具时,收到“对象指涉未设定为对象的执行严修”错误。Visual Studio将下列行反白显示为问题所在:

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

TemplateDetail是另一个UserControl。当我查看TemplateDetail时,它的设计器视图加载正常,所以我不认为那里有问题。在我的XAML中有一个名为cbo_templatesComboBox,它包含我的Template类的示例,该类具有Data属性但是,如果从上面的XAML中的Path中删除.Data,仍然会出现“对象引用”错误,因此我认为问题不在于我试图访问null上的Path属性。

<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"/>

得到这个错误是一个真实的的问题,因为设计视图将不会加载,所以我无法看到我的UserControl看起来像没有运行的应用程序。你知道什么可能是错误的?它建立良好,我没有看到任何绑定问题,在建设输出。

**编辑:**以下是两个UserControl的构造函数代码:

UserControl的构造函数出现“对象引用”错误:

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

我尝试嵌入的UserControl的构造函数,其设计视图加载正常:

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

**编辑:**在设置DataContext属性之前,我尝试在构造函数中进行if (null != grd_templateList)检查,但没有帮助--重新加载设计器时仍然出现“Object reference”错误。
编辑:ComboBox使用的List属性是DependencyProperty。我在Register方法中设置了默认值:

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

即使我尝试在我的UserControl的构造函数中初始化List,在重新加载设计器时仍然会出现错误。我不认为问题是List为null或SelectedItem.Data是错误路径。

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

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

显然,它不喜欢绑定TemplateData属性。

**编辑:**为了增加神秘感,我可以查看我的总体/主Window的设计视图,其中包括UserControl,它的设计视图给我“对象引用”错误。O_o

b4wnujal

b4wnujal1#

What Alex says是要走的路。但是我认为理解他所说的有点混乱。
假设您在Visual Studio中打开了项目,请打开另一个Visual Studio示例并选择 Debug-〉Attach To Process

  • XDesProc.exe(XAML UI设计工具)适用于VS 2012及更新版本
  • devenv.exe(适用于较旧的VS版本)。

然后对用户控件执行“重新加载设计器”,并查看第二个VS示例中的输出,以检查错误的确切原因。

ijnw1ujt

ijnw1ujt2#

如果您在XAML中有“对象指涉未设定为对象的执行严修”,但您的应用程序可以正常编译和执行,您通常会发现其原因是建构函式中的某些项目无法在设计阶段解析。
虽然您可以借助此问题的其他答案找出问题的根源,但有时您无法简单地修复此问题,您需要在代码中完全保留此问题,但您不希望看到此错误。
在这种情况下,只要按一下位于设计工具检视底部的[停用项目程式码]按钮,Visual Studio设计工具就会停止尝试建构执行严修以提供设计阶段数据检视。
有关详细信息,请参阅here

58wvjzkj

58wvjzkj3#

这可能是您的用户控件的构造函数中的一些东西。VS2008 WPF设计器似乎对此有一些问题。
在我们接手的一个项目中,我们补充道:

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

到使用者控件建构函式的开头,在该处会发生此错误,以避免该错误。

sqserrrh

sqserrrh4#

如果您的使用者控件在设计阶段掷回例外状况,您可以进行两柴。若要进行两柴,请在Visual Studio中开启含有此使用者控件的Dll项目。选取另一个Visual Studio执行严修做为两柴的可可执行。开始两柴。在第二个(已两柴的)Visual Studio执行严修中,使用客户端XAML页面中的使用者控件。如此一来,您就可以在设计模式中两柴使用者控件。

yptwkmov

yptwkmov5#

这个线程是有点老,但我有一个问题,我刚刚解决了它的帮助,所以我可能可以稍微澄清一些要点。
1.像往常一样在Visual Studio中加载解决方案。
1.打开VS的第二个示例,菜单debug/attach to process/选择devenv。你应该看不到什么壮观的东西!在VS 2010中,我只是得到“反汇编不能在运行模式下显示”。
1.回到第一个执行严修,也就是开启方案的地方。载入或重新载入有问题的XAML档案。如果您有问题(我在使用者控件上发生例外状况,所以无法载入该 windows ),调试工具应该会指向第二个执行严修中有问题的程式码。在我的案例中,这是非常清楚且明显的。
为了防止违规代码在设计时运行,我使用了

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

效果非常好。

mlnl4t2r

mlnl4t2r6#

在Visual Studio 2015 for WPF中:
1.将鼠标悬停在“设计”视图中的“对象引用未设置为对象的示例”上。
1.等待几秒钟,您将看到一个弹出窗口
1.选择“查看异常详细信息”(您还将看到“查看代码”和“删除此元素”
1.此对话框将显示异常和StackTrace
希望这对你有帮助。
如果您在XAML上执行此操作,您将只看到异常,而不会看到带有“查看异常详细信息”的弹出窗口,因此您需要在Designer/Design视图中执行此操作。

jjhzyzn0

jjhzyzn07#

在给一个对象命名后,我就能解决这个问题了。它是VS2015,我的标记是不同的,但它也可以帮助一些人:

<ResourceDictionary>
    <DataTemplate x:Key="ThisKeySolvesDesignersNullRef" 
                    DataType="local:MyViewModel">
        <local:MyControl/>
    </DataTemplate>
</ResourceDictionary>
fcipmucu

fcipmucu8#

今天我在UWP代码中编辑了很多XAML之后遇到了这个错误,我不知道是哪里出了问题...但是经过仔细检查之后,我注意到我犯了这个错误:

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

我错误地将我的Command分配给了Click处理程序,这导致了一个空引用异常...将Click更改为Command后,错误消失了。
XAML错误报告需要改进!

jutyujz0

jutyujz09#

我刚刚遇到VS2022的问题(17.3.3).我尝试从VS的另一个示例附加,但它始终没有出现异常。我尝试了所有我能找到的方法,如处理构造函数的设计用例和清除.vs目录。没有任何帮助。最后我尝试运行应用程序。运行时错误没有显示。运行后,这个问题现在似乎没有了。即使我关闭并重新打开解决方案,也看不到它了。

相关问题