WPF 读取和存储RichTextBox的文档内容

RichTextBox的文档内容是通过FlowDocument的形式存在。

在编辑RichTextBox内容时,我们看不到其文档的源码内容,因为我们没有像在Web开发中那样有浏览器自带的翻译功能可以使用(相关内容http://blog.sina.com.cn/s/blog_685790700100l61i.html)。

因此,对文档内容我们需要自己来转换和翻译。

将会用到两个对象

 System.Windows.Markup命名空间下的XamlWriter对象和XamlReader对象。

微软的相关内容和示例:

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对象就是字符串描述的对象,只是还没进行类型转换)

 

代码如下:

            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。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值