zoukankan      html  css  js  c++  java
  • WPF RichTextBox读取存储文本的方法和常用属性

    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);
                }
            }

  • 相关阅读:
    Qt计算器开发(三):执行效果及项目总结
    [HNOI2019]校园旅行
    How to fix nuget Unrecognized license type MIT when pack
    How to fix nuget Unrecognized license type MIT when pack
    git 通过 SublimeMerge 处理冲突
    git 通过 SublimeMerge 处理冲突
    git 上传当前分支
    git 上传当前分支
    gif 格式
    gif 格式
  • 原文地址:https://www.cnblogs.com/len0031/p/3483928.html
Copyright © 2011-2022 走看看