当我尝试重新载入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_templates
的ComboBox
,它包含我的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
9条答案
按热度按时间b4wnujal1#
What Alex says是要走的路。但是我认为理解他所说的有点混乱。
假设您在Visual Studio中打开了项目,请打开另一个Visual Studio示例并选择 Debug-〉Attach To Process。
XDesProc.exe
(XAML UI设计工具)适用于VS 2012及更新版本或devenv.exe
(适用于较旧的VS版本)。然后对用户控件执行“重新加载设计器”,并查看第二个VS示例中的输出,以检查错误的确切原因。
ijnw1ujt2#
如果您在XAML中有“对象指涉未设定为对象的执行严修”,但您的应用程序可以正常编译和执行,您通常会发现其原因是建构函式中的某些项目无法在设计阶段解析。
虽然您可以借助此问题的其他答案找出问题的根源,但有时您无法简单地修复此问题,您需要在代码中完全保留此问题,但您不希望看到此错误。
在这种情况下,只要按一下位于设计工具检视底部的[停用项目程式码]按钮,Visual Studio设计工具就会停止尝试建构执行严修以提供设计阶段数据检视。
有关详细信息,请参阅here。
58wvjzkj3#
这可能是您的用户控件的构造函数中的一些东西。VS2008 WPF设计器似乎对此有一些问题。
在我们接手的一个项目中,我们补充道:
到使用者控件建构函式的开头,在该处会发生此错误,以避免该错误。
sqserrrh4#
如果您的使用者控件在设计阶段掷回例外状况,您可以进行两柴。若要进行两柴,请在Visual Studio中开启含有此使用者控件的Dll项目。选取另一个Visual Studio执行严修做为两柴的可可执行。开始两柴。在第二个(已两柴的)Visual Studio执行严修中,使用客户端XAML页面中的使用者控件。如此一来,您就可以在设计模式中两柴使用者控件。
yptwkmov5#
这个线程是有点老,但我有一个问题,我刚刚解决了它的帮助,所以我可能可以稍微澄清一些要点。
1.像往常一样在Visual Studio中加载解决方案。
1.打开VS的第二个示例,菜单debug/attach to process/选择devenv。你应该看不到什么壮观的东西!在VS 2010中,我只是得到“反汇编不能在运行模式下显示”。
1.回到第一个执行严修,也就是开启方案的地方。载入或重新载入有问题的XAML档案。如果您有问题(我在使用者控件上发生例外状况,所以无法载入该 windows ),调试工具应该会指向第二个执行严修中有问题的程式码。在我的案例中,这是非常清楚且明显的。
为了防止违规代码在设计时运行,我使用了
效果非常好。
mlnl4t2r6#
在Visual Studio 2015 for WPF中:
1.将鼠标悬停在“设计”视图中的“对象引用未设置为对象的示例”上。
1.等待几秒钟,您将看到一个弹出窗口
1.选择“查看异常详细信息”(您还将看到“查看代码”和“删除此元素”
1.此对话框将显示异常和StackTrace
希望这对你有帮助。
如果您在XAML上执行此操作,您将只看到异常,而不会看到带有“查看异常详细信息”的弹出窗口,因此您需要在Designer/Design视图中执行此操作。
jjhzyzn07#
在给一个对象命名后,我就能解决这个问题了。它是VS2015,我的标记是不同的,但它也可以帮助一些人:
fcipmucu8#
今天我在UWP代码中编辑了很多XAML之后遇到了这个错误,我不知道是哪里出了问题...但是经过仔细检查之后,我注意到我犯了这个错误:
我错误地将我的Command分配给了Click处理程序,这导致了一个空引用异常...将Click更改为Command后,错误消失了。
XAML错误报告需要改进!
jutyujz09#
我刚刚遇到VS2022的问题(17.3.3).我尝试从VS的另一个示例附加,但它始终没有出现异常。我尝试了所有我能找到的方法,如处理构造函数的设计用例和清除.vs目录。没有任何帮助。最后我尝试运行应用程序。运行时错误没有显示。运行后,这个问题现在似乎没有了。即使我关闭并重新打开解决方案,也看不到它了。