`
wangleifire
  • 浏览: 511086 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【WPF】如何保存RichTextBox的文本到数据库?以及如何对RichTextBox的Document做绑定?

阅读更多

这几天一直有人问我如何保存RichTextBox的文本到数据库,包括格式等等,然后需要的再从数据库取出来,并且显示到RichTextBox中。

其实,RichTextBox的文本是一个FlowDocument类型的对象,我们只需要利用XamlReader和XamlWriter就能很好的完成上述工作。

 

【保存Document到流】

FlowDocument document = richTextBox.Document;

Stream s = new MemoryStream();  // 其他的什么Stream类型都没问题
XamlWriter.Save(document, s);

// 拿到s之后,再转化成二进制数据写到数据库就OK了

byte[] data = new byte[s.Length];

s.Position = 0;

s.Read(byte, 0, s.Length);

s.Close();

// 拿着data干啥都行

// ……

 

【从数据库中读取】

// data是从数据库中读出来的二进制数据

Stream s = new MemoryStream(data);

FlowDocument doc = XamlReader.Load(s) as FlowDocument;
s.Close();
richTextBox.Document = doc;

 

PS:有人问过我如何对RichTextBox的Document属性做绑定,由于RichTextBox的Document属性不是一个DependencyProperty,

所以我采用的是继承RichTextBox,自己定义一个BindableDocument的DependencyProperty来做。

<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->     public   class  BindableRichTextBox : RichTextBox
    
{
        
public  FlowDocument BindableDocument
        
{
            
get   return  (FlowDocument)GetValue(TextProperty); }
            
set   { SetValue(TextProperty, value); }
        }


        
//  Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc
         public   static   readonly  DependencyProperty TextProperty  =
            DependencyProperty.Register(
" BindableDocument " typeof (FlowDocument),  typeof (BindableRichTextBox),  new  UIPropertyMetadata( null new  PropertyChangedCallback(OnTextPropertyChanged)));

        
private   static   void  OnTextPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        
{
            BindableRichTextBox textBox 
=  sender  as  BindableRichTextBox;
            
if  (textBox  !=   null )
            
{
                textBox._changeFromBinding 
=   true ;
                textBox.OnTextPropertyChanged(e);                
            }

        }


        
//  防止死锁,比如A变了通知B,B变了又通知A
         private   bool  _changeFromBinding  =   false ;

        
//  当BindableDocument属性变化时,通知Document属性
         protected   virtual   void  OnTextPropertyChanged(DependencyPropertyChangedEventArgs e)
        
{
            
if  (_changeFromBinding)
            
{
                
this .Document  =  e.NewValue  as  FlowDocument;
            }

        }


        
//  当Document属性变化时,通知BindableDocument属性
         protected   override   void  OnTextChanged(TextChangedEventArgs e)
        
{
            
base .OnTextChanged(e);
            
if  ( ! _changeFromBinding)
            
{               
                
this .BindableDocument  =   this .Document;
            }

            
//  放到外面
            _changeFromBinding  =   false ;
        }

    }

 

做了个小程序,绑定了一个TextBox的Text到RichTextBox。 下载

分享到:
评论

相关推荐

    WPF RichTextBox 简单示例

    在Windows Presentation Foundation (WPF) 中,`RichTextBox` 是一个强大的文本编辑控件,用于显示和编辑富文本内容,支持格式化文本、图像、表格等复杂布局。本示例项目"RichTextBox 简单示例"展示了如何在WPF应用...

    wpf RichTextBox文本编辑器

    在Windows Presentation Foundation (WPF) 中,`RichTextBox` 是一个强大的控件,用于创建具有丰富格式化的文本编辑器。这个控件允许用户输入、编辑和格式化文本,包括字体、颜色、段落样式以及插入图像等。在本文中...

    RichTextBox Sample

    `RichTextBox`是微软.NET Framework中用于创建富文本编辑器的重要组件,它允许用户编辑具有格式化的文本,如不同字体、大小、颜色以及图片等多媒体元素。在Visual Studio 2008中,开发人员可以利用`RichTextBox`来...

    C#WPF写的文本编辑器

    "C# WPF编写的文本编辑器"是一个基于Windows Presentation Foundation (WPF) 框架的应用程序,主要用于实现基本的文本编辑功能,如打开、复制、粘贴、剪切和保存。WPF是.NET框架的一个部分,用于构建具有丰富用户...

    C# RichTextbox设置行间距

    频繁操作`RichTextBox`的文本内容可能会对性能造成影响,尤其是在大量文本的情况下。因此,当需要批量设置行间距时,最好一次性处理,而不是实时修改。 7. **事件响应**: 如果需要在用户输入时动态调整行间距,...

    显示WPF下FlowDocument(流文档)内容

    总结,FlowDocument在WPF中提供了丰富的文档处理功能,通过结合`RichTextBox`和`DocumentViewer`,以及利用样式、模板和数据绑定,可以创建出高度自定义和交互的用户界面。XamlpadX 4.0作为辅助工具,为开发过程提供...

    WPF.RichText

    **WPF.RichText:基于WPF的富文本编辑器** 在Windows Presentation Foundation(WPF)框架中,创建一个功能丰富的文本编辑器是一项挑战。`WPF.RichText`项目提供了一个解决方案,它是一个利用.NET Framework自带的...

    C# FlowDocument文档的实例

    它提供了丰富的文本格式化功能,包括字体样式、颜色、大小、对齐方式以及文本装饰如下划线、斜体和粗体。此外,它还支持嵌入图像、超链接和表格等复杂元素。 在C#中操作FlowDocument,通常涉及到以下关键知识点: ...

    WPF入门资料,适用于新手

    在用户界面服务中,提供了应用程序服务、部署服务、控件集、布局以及数据绑定等;在多媒体服务中可以看到WPF几乎可以处理所有的媒体类型,包括图片、音频、视频、动画、2D、3D、文本等。 四、XAML 在WPF中提供了两...

    文本编辑器C#

    9. **线程安全**:考虑到文本编辑器可能涉及到大量计算,如搜索或格式转换,可能需要在后台线程中执行这些任务以避免阻塞UI。C#的Task和async/await关键字可以帮助实现异步编程。 10. **版本控制集成**:高级的文本...

    WPF控件样式和模板手册

    - **显示SQL Server数据库中的数据**:使用ADO.NET连接数据库,然后绑定数据源到`DataGrid`。 - **调整大小选项**:通过`AutoGenerateColumns`、`CanUserResizeRows`等属性。 10. **DatePicker**:提供日期选择...

    wpf经典总结全中文pdf

    - **InitializeComponent() 方法**:这是从代码隐藏类的构造函数中调用的方法,用于加载XAML 资源并将其绑定到相应的类实例上。 #### 四、WPF的UI元素 - **窗口与对话框**:WPF 提供了多种类型的窗口和对话框,如`...

    WPF (Windows Presentation Foundation)基础

    【WPF(Windows Presentation Foundation)基础】 Windows Presentation Foundation(WPF)是微软为Windows操作系统创建的一个用户界面框架,首次发布于.NET Framework 3.0版本中,与Windows Vista一同推出。WPF的...

    WPF入门经典(必备)

    本篇文章将详细介绍WPF的基础概念、组成结构、编程架构以及关键特性之一的XAML,并简要概述WPF中提供的丰富控件集。 ### 一、概述 WPF是一个全面的用户界面框架,它不仅整合了原有的Windows图形技术,还引入了一...

    28_Documents_WPF_

    **WPF(Windows Presentation Foundation)文档功能详解** WPF,全称Windows Presentation Foundation,是微软.NET Framework中的一个组件,主要用于构建具有丰富用户界面的应用程序。它提供了强大的图形系统、媒体...

    WPF基础教程

    DocumentViewer和RichTextBox是用于显示和编辑此类内容的控件。 **13. 模态对话框和窗体** MessageBox和OpenFileDialog等模态对话框在WPF中用于与用户交互。Window类则提供了创建自定义窗体的能力。 **14. WPF与...

    WPF基础讲解 doc版

    学习WPF的基础,意味着掌握XAML语法、理解WPF的控件系统和布局机制,以及熟悉数据绑定和事件处理等核心概念。这对于初学者来说,是一个挑战,但也是通往高效、美观的Windows应用开发的关键步骤。通过不断实践和深入...

    WPF 控件.pdf

    - 将 `ListBox` 绑定到数据源。 - 获取 `ListBoxItem`。 - 提升 `ListBox` 的滚动性能。 #### ListView - **定义**: `ListView` 控件用于显示项目列表,并支持多种视图模式。 - **示例**: - 在标题获得单击时对...

    WPF入门指南WPF入门指南

    这些组件共同构成了WPF的基础,提供了丰富的功能,如图形渲染、文本处理、2D和3D图形、图像处理以及媒体播放。 **二、WPF的编程架构** WPF的编程架构由多个服务层组成,包括文档服务、用户界面服务、多媒体服务...

    Windows Vista培训系列课程(8):WPF之文档编程

    综上所述,Windows Vista培训系列课程中的WPF文档编程部分涵盖了从基本的文档类型到高级的多媒体集成,以及打印和样式设计等多个方面。通过学习这一课程,开发者将能够利用WPF的强大功能,创造出富有表现力和互动性...

Global site tag (gtag.js) - Google Analytics