You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用XamlObjectWriter.WriteStartMember触发NullReferenceException求助

解决XamlObjectWriter写入Paragraph.Inlines时的NullReferenceException问题

你的问题出在直接向Paragraph.Inlines集合属性写入字符串值。Inlines是InlineCollection类型的集合,它不能直接接收字符串,必须通过添加Inline派生对象(比如Run)来承载文本内容。此外,XamlObjectWriter处理集合属性时,需要遵循集合内容的写入规范,不能直接对集合成员写原始值。

修正后的代码如下:

using System.Windows.Documents;
using System.Xaml;

XamlSchemaContext context = System.Windows.Markup.XamlReader.GetWpfSchemaContext()!;
using var writer = new XamlObjectWriter(context);

// 写入FlowDocument根对象
XamlType flowDocumentXamlType = context.GetXamlType(typeof(FlowDocument))!;
writer.WriteStartObject(flowDocumentXamlType);

// 写入Blocks集合成员
XamlMember blocksXamlMember = flowDocumentXamlType.GetMember(nameof(FlowDocument.Blocks))!;
writer.WriteStartMember(blocksXamlMember);

// 写入Paragraph对象
XamlType paragraphXamlType = context.GetXamlType(typeof(Paragraph))!;
writer.WriteStartObject(paragraphXamlType);

// 写入Inlines集合成员
XamlMember paragraphInlinesXamlMember = paragraphXamlType.GetMember(nameof(Paragraph.Inlines))!;
writer.WriteStartMember(paragraphInlinesXamlMember);

// 写入Run对象承载文本
XamlType runXamlType = context.GetXamlType(typeof(Run))!;
writer.WriteStartObject(runXamlType);
XamlMember runTextMember = runXamlType.GetMember(nameof(Run.Text))!;
writer.WriteStartMember(runTextMember);
writer.WriteValue("Hello, world!");
writer.WriteEndMember(); // 结束Run.Text
writer.WriteEndObject(); // 结束Run对象

writer.WriteEndMember(); // 结束Paragraph.Inlines
writer.WriteEndObject(); // 结束Paragraph对象
writer.WriteEndMember(); // 结束FlowDocument.Blocks
writer.WriteEndObject(); // 结束FlowDocument对象

// 可选:获取生成的FlowDocument实例
FlowDocument doc = writer.Result as FlowDocument;

错误原因解析

当你调用writer.WriteStartMember(paragraphInlinesXamlMember)后直接写字符串值时,XamlObjectWriter会尝试将字符串赋值给Inlines属性,但:

  1. InlineCollection没有公开可设置的setter,只能通过Add方法添加元素;
  2. 字符串不是Inline类型的实例,无法被集合接受,底层处理时因无法找到合法的赋值逻辑导致空引用异常。

通过添加Run对象作为文本载体,既符合WPF文档模型的结构,也满足XamlObjectWriter对集合属性的写入要求。

内容的提问来源于stack exchange,提问作者Maxence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:23:19