轉帖|其它|編輯:郝浩|2011-07-08 17:43:29.000|閱讀 1398 次
概述:RichTextBox的文檔內容是通過FlowDocument的形式存在。在編輯RichTextBox內容時,我們看不到其文檔的源碼內容,因為我們沒有像在Web開發中那樣有瀏覽器自帶的翻譯功能可以使用(相關內容//blog.sina.com.cn/s/blog_685790700100l61i.html)。 因此,對文檔內容我們需要自己來轉換和翻譯。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
RichTextBox的文檔內容是通過FlowDocument的形式存在。
在編輯RichTextBox內容時,我們看不到其文檔的源碼內容,因為我們沒有像在Web開發中那樣有瀏覽器自帶的翻譯功能可以使用(相關內容//blog.sina.com.cn/s/blog_685790700100l61i.html)。
因此,對文檔內容我們需要自己來轉換和翻譯。
將會用到兩個對象
System.Windows.Markup命名空間下的XamlWriter對象和XamlReader對象。
微軟的相關內容和示例:
//msdn.microsoft.com/zh-cn/library/system.windows.markup.xamlwriter.aspx
//msdn.microsoft.com/zh-cn/library/system.windows.markup.xamlreader.aspx
通過使用XamlWriter.Save()靜態方法將獲取FlowDocument對象內容,XamlWriter.Save()多次重載,因此可以獲取多種類型的結果,當然,最直觀的就是獲取String類型的內容。這樣就獲得了這個FlowDocument對象的內容的String形式的字符串。
將字符串形式的文本轉換成FlowDocument的方法如下
利用XamlReader.Create()方法,讀取內容并創建一個XamlReader對象實例。
接著使用的XamlReader.Load()方法,將這個XamlReader實例轉換成一個Object對象(這個Object對象就是字符串描述的對象,只是還沒進行類型轉換)
代碼如下:
string xw = System.Windows.Markup.XamlWriter.Save(rtb2.Document);
MessageBox.Show(xw);
System.IO.StringReader sr = new System.IO.StringReader(xw);
System.Xml.XmlReader xr = System.Xml.XmlReader.Create(sr);
rtb1.Document = (FlowDocument)System.Windows.Markup.XamlReader.Load(xr);
說明 rtb1和rtb2都是RichTextBox控件,這段代碼的作用是將rtb2中輸入的內容(FlowDocument)轉換成一個字符串xw。
然后將xw再轉換成rtb1的內容(FlowDocument)。
這兩個轉換過程在例子中是連在一起的,只要稍作變換,在中間加入數據庫的保存和讀取操作,就可以實現保存RichTextBox內容到數據庫和現實數據庫內容到RichTextBox的功能。
需要注意的是,FlowDocument的標記采用的是Xaml,與我們熟悉的HTML是不互通的,所以,讀取出來的字符串必須是Xaml格式的,也就是說,XamlReader只能讀取Xaml標準格式。
另外,MessageBox.Show(xw)可以看到,無論將什么對象通過XamlWrite序列化成字符床,都會加入一個Xmlns屬性,這個屬性指定文檔命名空間,所以,直接XamlReader一個Xaml格式的字符串還不夠,還需要加入Xmlns屬性。通過XamlWrite讀取是自動就加上了的,如果想手工輸入Xaml格式的字符串別忘了Xmlns。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載