2009-12-29 56 views
0

我有一個名爲跨度」測試1" ,我要替換的編程WPF flowdocument元素名稱被重置?

TextRange tr = new TextRange(this.test1.ContentStart,this.test1.ContentEnd); 
Run run = this.test1.Inlines.First() as Run; 

run.Text = "replaced text"; 

這工作內容的FlowDocument的,但這個問題做了更新跨度的名字被刪除(在看時, xaml源)。這是設計嗎?有沒有辦法保留Id的? 嗨,這是我使用在RichTextBox的調試什麼實際的方法,使用(設置XAML源到文本框)

(MemoryStream的MS =新的MemoryStream()){ TR =新的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

你是如何看待xaml源代碼的? Id的意思是什麼?你還可以用流文檔發佈你的Xaml代碼嗎? – Anvaka 2009-12-29 16:43:00

+0

嗨,我保存一個textrange的內容作爲DataFormats.Xaml跨越整個文檔到我在文本框中查看用於調試目的的字符串。使用Id我只是span元素中的Name屬性 – Homde 2009-12-29 19:35:06

回答

0

不幸的是,這是現在的樣子FlowDocuments工作(同樣與標籤)。我發現唯一的(非常哈希)解決方案是隱藏FontFamily屬性中的名稱。這是有效的,因爲這個屬性是逗號分隔的字符串列表,第一個字符串與正在使用的現有字體系列匹配,其餘字符被忽略。所以如果你這樣做:

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

整個字符串將被保留。然後,您可以通過搜索FontFamily的「name =」來訪問「名稱」。

再一次,相當黑客,但經過幾個月的嘗試,它是我能找到的唯一解決方案。