• WPF RichTextBox 控件常用方法和属性


    以下内容转自 http://blog.csdn.net/yulongguiziyao/article/details/25330551。

    1. 取得已被选中的内容:

    (1)使用 RichTextBox.Document.Selection属性
    (2)访问RichTextBox.Document.Blocks属性的“blocks”中的Text
    2. 在XAML中增加内容给RichTextBox:
    <RichTextBox IsSpellCheckEnabled="True">
       <FlowDocument>
            <Paragraph>
    <!-- 这里加上你的内容 -->
              This is a richTextBox. I can <Bold>Bold</Bold>, <Italic>Italicize</Italic>, <Hyperlink>Hyperlink stuff</Hyperlink> right in my document.
            </Paragraph>
       </FlowDocument>
    </RichTextBox>
    3. 缩短段间距,类似<BR>,而不是<P>
    方法是使用Style定义段间距:
        <RichTextBox>
            <RichTextBox.Resources>
              <Style TargetType="{x:Type Paragraph}">
                <Setter Property="Margin" Value="0"/>
              </Style>
            </RichTextBox.Resources>
            <FlowDocument>
              <Paragraph>
                This is my first paragraph... see how there is...
              </Paragraph>
              <Paragraph>
                a no space anymore between it and the second paragraph?
              </Paragraph>
            </FlowDocument>
          </RichTextBox>
    4. 从文件中读出纯文本文件后放进RichTextBox或直接将文本放进RichTextBox中:
    private void LoadTextFile(RichTextBox richTextBox, string filename)
    {
        richTextBox.Document.Blocks.Clear();
        using (StreamReader streamReader = File.OpenText(filename)) {
               Paragraph paragraph = new Paragraph();
               paragraph.Text = streamReader.ReadToEnd();
               richTextBox.Document.Blocks.Add(paragraph);
        }
    }

    5.如何在RichTextBox中添加文本

    RichTextBox 是WPF中的一个控件,它存储的内容由其 Document 属性来呈现。Document 是一个 FlowDocument 类型。

    FlowDocument 是放置块内容(Blocks)和Inlines的容器 。

    块级元素(Block)包括:Paragraph,List,Table,Section

    Inline元素包括:Run,Span,Bold、Italic、Underline,Hyperlink,LineBreak,InlineUIContainer,Floater、Figure

    richtextbox添加文本代码:

     string myText="hello!";

     RichTextBox MyRichTextBox=new RichTextBox ();

     FlowDocument doc = new FlowDocument();

     Paragraph p = new Paragraph();

     Run r = new Run(myText);

     p.Inlines.Add(r);//Run级元素添加到Paragraph元素的Inline

     doc.Blocks.Add(p);//Paragraph级元素添加到流文档的块级元素

     MyRichTextBox.Document = doc;

    }
    6. 取得指定RichTextBox的内容:
    private string GetText(RichTextBox richTextBox) 
    {
            TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
            return textRange.Text;
    }
    7. 将RTF (rich text format)放到RichTextBox中:
            private static void LoadRTF(string rtf, RichTextBox richTextBox)
            {
                if (string.IsNullOrEmpty(rtf)) {
                    throw new ArgumentNullException();
                }
                TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
                using (MemoryStream rtfMemoryStream = new MemoryStream()) {
                    using (StreamWriter rtfStreamWriter = new StreamWriter(rtfMemoryStream)) {
                        rtfStreamWriter.Write(rtf);
                        rtfStreamWriter.Flush();
                        rtfMemoryStream.Seek(0, SeekOrigin.Begin);
                        //Load the MemoryStream into TextRange ranging from start to end of RichTextBox.
                        textRange.Load(rtfMemoryStream, DataFormats.Rtf);
                    }
                }
            }
    8. 将文件中的内容加载为RichTextBox的内容
            private static void LoadFile(string filename, RichTextBox richTextBox)
            {
                if (string.IsNullOrEmpty(filename)) {
                    throw new ArgumentNullException();
                }
                if (!File.Exists(filename)) {
                    throw new FileNotFoundException();
                }
                using (FileStream stream = File.OpenRead(filename)) {
                    TextRange documentTextRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
                    string dataFormat = DataFormats.Text;
                    string ext = System.IO.Path.GetExtension(filename);
                    if (String.Compare(ext, ".xaml",true) == 0) {
                        dataFormat = DataFormats.Xaml;
                    }
                    else if (String.Compare(ext, ".rtf", true) == 0) {
                        dataFormat = DataFormats.Rtf;
                    }
                    documentTextRange.Load(stream, dataFormat);
                }        
            }
    9. 将RichTextBox的内容保存为文件:
            private static void SaveFile(string filename, RichTextBox richTextBox)
            {
                if (string.IsNullOrEmpty(filename)) {
                    throw new ArgumentNullException();
                }
                using (FileStream stream = File.OpenWrite(filename)) {
                    TextRange documentTextRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
                    string dataFormat = DataFormats.Text;
                    string ext = System.IO.Path.GetExtension(filename);
                    if (String.Compare(ext, ".xaml", true) == 0) {
                        dataFormat = DataFormats.Xaml;
                    }
                    else if (String.Compare(ext, ".rtf", true) == 0) {
                        dataFormat = DataFormats.Rtf;
                    }
                    documentTextRange.Save(stream, dataFormat);
                }
            }
    10. 做个简单的编辑器:
      <!-- Window1.xaml -->
      <DockPanel>
        <Menu DockPanel.Dock="Top">
          <MenuItem Header="_File">
            <MenuItem Header="_Open File" Click="OnOpenFile"/>
            <MenuItem Header="_Save" Click="OnSaveFile"/>
            <Separator/>
            <MenuItem Header="E_xit" Click="OnExit"/>
          </MenuItem>      
        </Menu>
        <RichTextBox Name="richTextBox1"></RichTextBox>     
      </DockPanel>
            // Window1.xaml.cs
            private void OnExit(object sender, EventArgs e) {
                this.Close();
            }
            private void OnOpenFile(object sender, EventArgs e) {
                Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
                ofd.Filter = "Text Files (*.txt; *.xaml; *.rtf)|*.txt;*.xaml;*.rtf";
                ofd.Multiselect = false;
                if (ofd.ShowDialog() == true) {
                    LoadFile(ofd.SafeFileName, richTextBox1);
                }
            }
            private void OnSaveFile(object sender, EventArgs e) {
                Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
                sfd.Filter = "Text Files (*.txt; *.xaml; *.rtf)|*.txt;*.xaml;*.rtf";
                if (sfd.ShowDialog() == true) {
                    SaveFile(sfd.SafeFileName, richTextBox1);
                }
            }

    取出richTextBox里面的内容
    第一种方法:将richTextBox的内容以字符串的形式取出
    string xw = System.Windows.Markup.XamlWriter.Save(richTextBox.Document);
    第二种方法:将richTextBox的类容以二进制数据的方法取出
    FlowDocument document = richTextBox.Document;
    System.IO.Stream s = new System.IO.MemoryStream(); 
    System.Windows.Markup.XamlWriter.Save(document, s); 
    byte[] data = new byte[s.Length];
    s.Position = 0;
    s.Read(data, 0, data.Length);
    s.Close();

    赋值给richTextBox

    第一种方法:将字符串转换为数据流赋值给richTextBox中 

    System.IO.StringReader sr = new System.IO.StringReader(xw);
    System.Xml.XmlReader xr = System.Xml.XmlReader.Create(sr);
    richTextBox1.Document = (FlowDocument)System.Windows.Markup.XamlReader.Load(xr);
    第二种方法:将二进制数据赋值给richTextBox
    System.IO.Stream ss = new System.IO.MemoryStream(data);
    FlowDocument doc = System.Windows.Markup.XamlReader.Load(ss) as FlowDocument;
    ss.Close();
    richTextBox1.Document = doc;

      

    清空RichTextBox的方法

    System.Windows.Documents.FlowDocument doc = richTextBox.Document;
    doc.Blocks.Clear();

      

    如何将一个String类型的字符串赋值给richTextBox
    myRTB.Document = new FlowDocument(new Paragraph(new Run(myString))); 
    FlowDocument doc = new FlowDocument();
    Paragraph p = new Paragraph(); // Paragraph 类似于 html 的 P 标签
    Run r = new Run(myString); // Run 是一个 Inline 的标签
    p.Inlines.Add(r);
    doc.Blocks.Add(p);
    myRTB.Document = doc;

    如何将richTextBox中的内容以rtf的格式完全取出
    string rtf = string.Empty;
    TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    {
    textRange.Save(ms, System.Windows.DataFormats.Rtf);
    ms.Seek(0, System.IO.SeekOrigin.Begin);
    System.IO.StreamReader sr = new System.IO.StreamReader(ms);
    rtf = sr.ReadToEnd();
    }
     

     操作RichTextBox

    复制 ToolBarCopy.Command = System.Windows.Input.ApplicationCommands.Copy;
    剪切 toolBarCut.Command = System.Windows.Input.ApplicationCommands.Cut;
    粘贴 ToolBarPaste.Command = System.Windows.Input.ApplicationCommands.Paste;
    撤销 ToolBarUndo.Command = System.Windows.Input.ApplicationCommands.Undo;
    复原 ToolBarRedo.Command = System.Windows.Input.ApplicationCommands.Redo;
    文字居中 toolBarContentCenter.Command = System.Windows.Documents.EditingCommands.AlignCenter;
    文字居右 toolBarContentRight.Command = System.Windows.Documents.EditingCommands.AlignRight;
    文字居左 toolBarContentLeft.Command = System.Windows.Documents.EditingCommands.AlignLeft;
    有序排列 ToolBarNumbering.Command = System.Windows.Documents.EditingCommands.ToggleNumbering;
    无序排列 ToolBarBullets.Command = System.Windows.Documents.EditingCommands.ToggleBullets;
    字体变大
    int fontSize = Convert.ToInt32(richTextBox.Selection.GetPropertyValue(TextElement.FontSizeProperty));
    fontSize++;
    richTextBox.Selection.ApplyPropertyValue(TextElement.FontSizeProperty, fontSize.ToString());

  • 相关阅读:
    flash 自定义右键功能
    本地和VMware虚拟主机之间的网络访问
    java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错
    火狐 提示“此连接是不受信任的” 可能是因为开启了其它抓包代理软件导致的
    批量导入数据库
    引用Interop.SQLDMO.dll后的注意事项。
    c# Invoke和BeginInvoke 区别
    闭包的7种形式
    C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件
    C# Socket编程笔记
  • 原文地址:https://www.cnblogs.com/xiefang2008/p/5961897.html
Copyright © 2020-2023  润新知