我有一个名为Span“test1”的flowdocument,我想以编程方式替换内容
TextRange tr = new TextRange(this.test1.ContentStart,this.test1.ContentEnd);
Run run = this.test1.Inlines.First() as Run;
run.Text = "replaced text";
这样可行,但问题是在进行更新时删除了跨度的名称(查看xaml源代码)。这是设计的吗?有没有办法保留Id的? 嗨,这是我在richtextbox中实际调试的方法(将xaml源设置为文本框)
使用(MemoryStream ms = new MemoryStream()) { tr = new TextRange(this.richTextBox1.Document.ContentStart,this.richTextBox1.Document.ContentEnd); tr.Save(ms,DataFormats.Xaml); ms.Position = 0;
using (StreamReader sr = new StreamReader(ms))
{
this.textBox1.Text = sr.ReadToEnd();
}
}
这是richtextbox的测试内容:
<FlowDocument>
<Paragraph>
This is my first <Span Name="test1">a huge amount of space</Span> between it and the second paragraph?
</Paragraph>
</FlowDocument>
答案 0 :(得分:0)
不幸的是,这只是FlowDocuments的工作方式(与标签相同)。我找到的唯一(非常 hacky)解决方案是在FontFamily属性中隐藏名称。这是有效的,因为此属性是以逗号分隔的字符串列表,第一个字符串与正在使用的现有字体系列匹配,其余字符串被忽略。所以如果你做这样的事情:
document.FontFamily = "RealFont1, RealFont2, name=test1";
整个字符串将被保留。然后,您可以通过在FontFamily中搜索“name =”来访问“名称”。
再次,非常hacky,但经过几个月的尝试,这是我能找到的唯一解决方案。