如何以编程方式添加XAML中定义的Inline至FlowDocument?
当然可以实现!用XamlReader解析XAML字符串即可
你现在的问题是直接把XAML字符串传给Inlines.Add(),但这个方法需要的是实际的Inline类型对象,不是纯文本字符串。解决办法很简单——用XamlReader.Parse()把XAML字符串解析成对应的WPF元素,再添加到集合里就行。
具体步骤和代码示例:
首先确保你引用了System.Windows.Markup命名空间,然后修改你的代码如下:
XAML部分保持不变:
<FlowDocument> <Paragraph Name="Output"/> </FlowDocument>
C#代码调整为:
using System.Windows.Markup; using System.Windows.Documents; // 创建要追加的Span容器 var appendTo = new Span(); // 定义要解析的XAML字符串 var xamlContent = "<Run>Something</Run>"; try { // 把XAML字符串解析成Inline对象 var parsedInline = (Inline)XamlReader.Parse(xamlContent); // 将解析后的元素添加到Span的Inlines集合 appendTo.Inlines.Add(parsedInline); // 最后把Span添加到目标Paragraph中 Output.Inlines.Add(appendTo); } catch (XamlParseException ex) { // 处理XAML格式错误的情况,避免程序崩溃 appendTo.Inlines.Add(new Run($"解析XAML失败:{ex.Message}")); Output.Inlines.Add(appendTo); }
补充说明:
XamlReader.Parse()能把合法的XAML字符串转换成对应的WPF元素,这里我们强制转换为Inline类型,因为你的XAML定义的是Run(属于Inline的子类)。- 如果你的XAML是更复杂的Inline元素(比如
<Bold>加粗内容</Bold>、<Italic>斜体内容</Italic>),同样可以用这个方法解析,只要根元素是Inline的派生类就行。 - 一定要加异常处理,避免因为XAML格式写错导致程序崩溃。
内容的提问来源于stack exchange,提问作者user7232539
相关产品推荐
相关产品推荐

