彩票走势图

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

转帖|其它|编辑:郝浩|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@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP