RichTextBox的文档内容是通过FlowDocument的形式存在。
在编辑RichTextBox内容时,我们看不到其文档的源码内容,因为我们没有像在Web开发中那样有浏览器自带的翻译功能可以使用(相关内容http://blog.sina.com.cn/s/blog_685790700100l61i.html)。
因此,对文档内容我们需要自己来转换和翻译。
将会用到两个对象
微软的相关内容和示例:
http://msdn.microsoft.com/zh-cn/library/system.windows.markup.xamlwriter.aspx
http://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对象就是字符串描述的对象,只是还没进行类型转换)
代码如下:
说明 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。