WPF:WPF中RichTextBox的使用小窍门(转)
2012-05-31 19:18
519 查看
原文在此:http://blogs.msdn.com/jfoscoding/archive/2006/01/14/512825.aspx
这里仅整理出其中的知识点:
1. 取得已被选中的内容:
(1)使用 RichTextBox.Document.Selection属性
(2)访问RichTextBox.Document.Blocks属性的“blocks”中的Text
2. 在XAML中增加内容给RichTextBox:
3. 缩短段间距,类似<BR>,而不是<P>
方法是使用Style定义段间距:
4. 从文件中读出纯文本文件后放进RichTextBox或直接将文本放进RichTextBox中:
5. 取得指定RichTextBox的内容:
6. 将RTF (rich text format)放到RichTextBox中:
7. 将文件中的内容加载为RichTextBox的内容
8. 将RichTextBox的内容保存为文件:
9. 做个简单的编辑器:
这里仅整理出其中的知识点:
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); } } private void LoadText(RichTextBox richTextBox, string txtContent) { richTextBox.Document.Blocks.Clear(); Paragraph paragraph = new Paragraph(); paragraph.Text = txtContent; richTextBox.Document.Blocks.Add(paragraph); }
5. 取得指定RichTextBox的内容:
private string GetText(RichTextBox richTextBox) { TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd); return textRange.Text; }
6. 将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); } } }
7. 将文件中的内容加载为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); } }
8. 将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); } }
9. 做个简单的编辑器:
<!-- 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); } }
相关文章推荐
- WPF中RichTextBox的使用小窍门(翻译、整理)
- [转]WPF中RichTextBox的使用小窍门(翻译、整理)
- WPF中定义TabItem的可选区域(特别是当使用Label来呈现Header时)
- WPF中的binding(八)- 使用ObjectDataProvider对象作为Binding的Source
- Silverlight教程第八部分:使用WPF创建一个Digg桌面应用
- WPF 使用Caliburn.Micro 多线程打开窗口
- Chat FX for WPF图表控件使用教程
- WPF使用资源绑定自定义类型
- (zepto插件使用)click、tap无效又能实现点击事件小窍门
- WPF 使用PrintDialog进行可见数据打印
- WPF中使用Image控件显示图片
- WPF颜色设置工具,使用Form中的ColorDialog控件来改变颜色
- Notes的使用一个小窍门,Notes Open History
- WPF使用BindingListCollectionView 和 ListCollectionView 视图排序集合
- WPF下使用Uri加载相对路径资源
- WPF中资源文件的使用
- WPF – 使用触发器
- WPF中使用Free解决访问非UI线程创建的对象抛出的Thread异常
- WPF中使用ObjectDataProvider绑定方法
- VS2008.Net下使用WPF开发Web应用程序小例