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