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

  • 相关阅读:
    前端- css
    前端- html -总结
    2016.9.15 黑客编程之无限启动
    2016.9.14 JavaScript入门之七面向对象和函数
    2016.9.13 JavaScript入门之六基础函数
    2016.9.1 JavaScript入门之五
    2016.9.9 网络工程师之路由器技术
    2016.8.14 网络工程师之网关协议
    2016.8.27 JavaScript入门之四
    2016.8.22 JavaScript入门之三
  • 原文地址:https://www.cnblogs.com/len0031/p/3483928.html
Copyright © 2011-2022 走看看