WPF flowdocument元素名称被重置?

时间:2009-12-29 11:33:52

标签: wpf flowdocument

我有一个名为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>

1 个答案:

答案 0 :(得分:0)

不幸的是,这只是FlowDocuments的工作方式(与标签相同)。我找到的唯一(非常 hacky)解决方案是在FontFamily属性中隐藏名称。这是有效的,因为此属性是以逗号分隔的字符串列表,第一个字符串与正在使用的现有字体系列匹配,其余字符串被忽略。所以如果你做这样的事情:

document.FontFamily = "RealFont1, RealFont2, name=test1";

整个字符串将被保留。然后,您可以通过在FontFamily中搜索“name =”来访问“名称”。

再次,非常hacky,但经过几个月的尝试,这是我能找到的唯一解决方案。