WpfXamlLoader.TransformNodes()中引发了NullReferenceException的原因是什么?

7
我正在尝试追踪一个问题,这个问题只在发布模式下出现,很可能是由于某个属性的无效混淆引起的。我知道它发生在初始化特定控件时,但这个控件非常庞大。我已经花了一天时间查看所有的XAML和绑定,但仍然无法看出是什么导致了这个异常。 有没有办法获取更多信息?知道是什么引起了这个异常吗?
Exception : System.NullReferenceException
Message   : Object reference not set to an instance of an object.
Source    : PresentationFramework
Help      : 
Stack     :
   at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at MyClass.InitializeComponent()
2个回答

9

我不知道如何获得更详细的异常消息,但至少让其他人知道可能的原因可能会有用。我刚刚追踪到了WpfXamlLoader.TransformNodes中的NullReferenceException,它是由一个使用DependencyProperty.Register(string, Type, Type)注册的DependencyProperty引起的。更改

public static readonly DependencyProperty FooProperty = DependencyProperty.Register(
        nameof(Foo), typeof(object), typeof(Bar));

为了

public static readonly DependencyProperty FooProperty = DependencyProperty.Register(
        nameof(Foo), typeof(object), typeof(Bar), new FrameworkPropertyMetadata(null));

问题已经解决。


3
你是怎么发现这个的?你真厉害。我已经困扰这个问题好几个月了,完全不知道原因。 - Pat
@Pat,我不记得我是怎么发现它的,但我很高兴它能帮到你。 - Peter Taylor

3

似乎无法获得更详细的异常信息。将有问题的XAML分解成较小的部分是解决问题的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接