Silverlight4版本中,RichTextBox_第1页
Silverlight4版本中,RichTextBox_第2页
Silverlight4版本中,RichTextBox_第3页
Silverlight4版本中,RichTextBox_第4页
Silverlight4版本中,RichTextBox_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在Silverlight4版本中,RichTextBox这个控件算是很受期待的控件了,希望通过这篇文章让你对该控件有所了解。在Sl中,有TextBox,TextBlock,RichTextBox这3个核心的文本控件,从表面上看,RichTextBox看起来和一个普通的TextBox并没有太多的区别,实际上它提供了诸如格式化文本,段落,超链接,内联图像这些功能,它甚至可以显示任何UIElement,比如DataGrid。MSDN有关于RichTextBox内容模型的一个关系图RichTextBox的内容属性是Blocks,这是一个Paragraph的集合,这些Paragraph可以包含Inlin

2、e元素派生的元素。 比如Run,Span,Bold,Italic,Hyperlink,InlineUIContainer,其实从图中你可能会注意到Hyperlink比较特殊,它不能包含其它Inline类型的元素。下面熟悉RichTextBox中一些简单的属性:添加RichTextBox:1. RichTextBox常用的属性包括AcceptReturn和IsReadOnly属性,只有在只读模式下,UI元素才是可用的。添加元素:前面已经提到,RichTextBox包含了Paragraph集合,所以我们可以轻易添加任何内联元素,那么这里我们看一看在一个Paragraph中添加多个元素的Code1.

3、 ParagraphprgParagraph=newParagraph(); 2. RunrnMyText=newRun(); 3. rnMyText.Text=Thisissomeexampletextwitha; 4. prgParagraph.Inlines.Add(rnMyText); 5. HyperlinklnkSSLink=newHyperlink(); 6. lnkSSLink.Inlines.Add(linktoSilverlightShow); 7. lnkSSLink.NavigateUri=newUri(); 8. prgPar

4、agraph.Inlines.Add(lnkSSLink); 9. rbtMyRichTextBox.Blocks.Add(prgParagraph); Paragraph prgParagraph = new Paragraph();Run rnMyText = new Run();rnMyText.Text = This is some example text with a ;prgParagraph.Inlines.Add(rnMyText);Hyperlink lnkSSLink = new Hyperlink();lnkSSLink.Inlines.Add(link to Silv

5、erlight Show);lnkSSLink.NavigateUri = new Uri();prgParagraph.Inlines.Add(lnkSSLink); rbtMyRichTextBox.Blocks.Add(prgParagraph);上面的代码中,添加了一些文本和一个超链接,那么首先要做的是实例化一个Paragraph,在这个Paragraph中,我们添加了文本和超链接,这些对象被添加到该Paragraph中的Inlines集合中,最后将这个Paragraph添加到了RichTextBox中格式文本对象:Run元素只能包含非格式化的

6、文本,如果想要对文本进行格式化,那么可以采用变通的方式,即将Run元素包含在内联的格式元素中1. ParagraphprgParagraph=newParagraph(); 2. BoldbldText=newBold(); 3. bldText.Inlines.Add(newRun()Text=Thisissomeexampletextinbold); 4. ItalicitlText=newItalic(); 5. itlText.Inlines.Add(newRun()Text=Thisissomeexampletextinitalics); 6. UnderlineunText=new

7、Underline(); 7. unText.Inlines.Add(newRun()Text=Thisissomeexampletext,underlined); 8. BoldbldTextWithItalic=newBold(); 9. bldTextWithItalic.Inlines.Add(newItalic()Inlines=newRun()Text=Thisissomeexampletext,boldanditalic); 10. prgParagraph.Inlines.Add(bldText); 11. prgParagraph.Inlines.Add(newLineBre

8、ak(); 12. prgParagraph.Inlines.Add(itlText); 13. prgParagraph.Inlines.Add(newLineBreak(); 14. prgParagraph.Inlines.Add(unText); 15. prgParagraph.Inlines.Add(newLineBreak(); 16. prgParagraph.Inlines.Add(bldTextWithItalic); 17. rbtMyRichTextBox.Blocks.Add(prgParagraph); Paragraph prgParagraph = new Pa

9、ragraph();Bold bldText = new Bold();bldText.Inlines.Add(new Run() Text = This is some example text in bold );Italic itlText = new Italic();itlText.Inlines.Add(new Run() Text = This is some example text in italics );Underline unText = new Underline();unText.Inlines.Add(new Run() Text = This is some e

10、xample text, underlined );Bold bldTextWithItalic = new Bold();bldTextWithItalic.Inlines.Add(new Italic() Inlines = new Run() Text = This is some example text, bold and italic );prgParagraph.Inlines.Add(bldText);prgParagraph.Inlines.Add(new LineBreak();prgParagraph.Inlines.Add(itlText);prgParagraph.I

11、nlines.Add(new LineBreak();prgParagraph.Inlines.Add(unText);prgParagraph.Inlines.Add(new LineBreak();prgParagraph.Inlines.Add(bldTextWithItalic);rbtMyRichTextBox.Blocks.Add(prgParagraph);上面的代码分别实现了文本的加粗,倾斜,下滑线功能,和添加元素的代码没有太大区别。添加InlineUIContainer:顾名思义,这个元素就是UI元素的容器,当我们想要在内容中添加Image,DataGrid这些元素的时候,它

12、非常的方便,步骤也是和其它内联元素一样的。先创建一个InlineUIContainer,然后在容器中添加UIElement,把这个容器添加到Paragraph中1. InlineUIContaineriuicContainer=newInlineUIContainer(); 2. DataGriddtgGrid=newDataGrid(); 3. dtgGrid.AutoGenerateColumns=true; 4. dtgGrid.Width=400; 5. dtgGrid.Height=200; 6. dtgGrid.ItemsSource=. 7. iuicContainer.Chil

13、d=dtgGrid; 8. ParagraphprgParagraph=newParagraph(); 9. prgParagraph.Inlines.Add(iuicContainer); 10. rbtMyRichTextBox.Blocks.Add(prgParagraph); InlineUIContainer iuicContainer = new InlineUIContainer();DataGrid dtgGrid = new DataGrid();dtgGrid.AutoGenerateColumns = true;dtgGrid.Width = 400;dtgGrid.He

14、ight = 200;dtgGrid.ItemsSource = .iuicContainer.Child = dtgGrid;Paragraph prgParagraph = new Paragraph();prgParagraph.Inlines.Add(iuicContainer);rbtMyRichTextBox.Blocks.Add(prgParagraph);上面的CODE如果改成XAML声明:1. 4. 5. 6. 7. 8. 9. 通过上面的内容已经对RichTextBox有了基本的了解,其实之前我们都是通过编程的方式加入这些元素,但是更为常见的场景是 用户可以通过选择某些文本

15、,并对选中的文本进行加粗等操作,RichTextBox提供了一个类型为TextSelection的Selection属性, 它包含了当前被选择的文本,然后我们可以通过GetPropertyValue和ApplyPropertyValue方法对选择的文本进行操作。操作Selection:1. if(rbtMyRichTextBox!=null&rbtMyRichTextBox.Selection.Text.Length0) 2. 3. if(rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty)isFontWeigh

16、t 4. &(FontWeight)rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty)=FontWeights.Normal) 5. 6. rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty,FontWeights.Bold); 7. 8. else 9. 10. rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty,FontWeights.N

17、ormal); 11. 12. 13. if(rbtMyRichTextBox!=null) 14. 15. rbtMyRichTextBox.Focus(); 16. if (rbtMyRichTextBox != null & rbtMyRichTextBox.Selection.Text.Length 0) if (rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty) is FontWeight & (FontWeight)rbtMyRichTextBox.Selection.GetPropertyValu

18、e(Run.FontWeightProperty) = FontWeights.Normal) rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty, FontWeights.Bold); else rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty, FontWeights.Normal); if (rbtMyRichTextBox != null) rbtMyRichTextBox.Focus(); 上面的代码中,我们获取

19、了选中文本的FontWeight属性,通过检查它是Normal还是Bold改变其值,这里的逻辑也可以用在 FontSize等其它的属性上。简单的复制,剪切,粘贴功能:Sl4支持Clipboard功能,所以通过访问Clipboard我们可以很容易实现剪切,复制功能。1. privatevoidCopy_Click(objectsender,RoutedEventArgse) 2. 3. Clipboard.SetText(rbtMyRichTextBox.Selection.Text); 4. rbtMyRichTextBox.Focus(); 5. 6. privatevoidCut_Clic

20、k(objectsender,RoutedEventArgse) 7. 8. Clipboard.SetText(rbtMyRichTextBox.Selection.Text); 9. rbtMyRichTextBox.Selection.Text=; 10. rbtMyRichTextBox.Focus(); 11. 12. /上面的代码分别演示如何对RichTextBox中被选中的文本进行复制,剪切 13. privatevoidPaste_Click(objectsender,RoutedEventArgse) 14. 15. rbtMyRichTextBox.Selection.Te

21、xt=Clipboard.GetText(); 16. rbtMyRichTextBox.Focus(); 17. private void Copy_Click(object sender, RoutedEventArgs e) Clipboard.SetText(rbtMyRichTextBox.Selection.Text); rbtMyRichTextBox.Focus();private void Cut_Click(object sender, RoutedEventArgs e) Clipboard.SetText(rbtMyRichTextBox.Selection.Text)

22、; rbtMyRichTextBox.Selection.Text = ; rbtMyRichTextBox.Focus(); /上面的代码分别演示如何对RichTextBox中被选中的文本进行复制,剪切 private void Paste_Click(object sender, RoutedEventArgs e) rbtMyRichTextBox.Selection.Text = Clipboard.GetText(); rbtMyRichTextBox.Focus();复制的时候,如果RichTextBox没有选择任何元素,那么剪切板上的文本将显示在鼠标的当前位置上。注意的是,Cil

23、pboard只能保护简单 的文本,所以当粘贴,复制的时候会丢失之前格式化的信息。保存内容为文件:RichTextBox提供了一个名为Xaml的属性,通过这个属性可以很方便的将内容保存为文件。1. privatevoidSave_Click(objectsender,RoutedEventArgse) 2. 3. varuiElements=fromblockinrbtMyRichTextBox.Blocks 4. frominlinein(blockasParagraph).Inlines 5. whereinline.GetType()=typeof(InlineUIContainer) 6

24、. selectinline; 7. if(uiElements.Count()!=0) 8. 9. MessageBox.Show(UIElementscannotbesaved); 10. return; 11. 12. SaveFileDialogsfdSaveXaml=newSaveFileDialog(); 13. sfdSaveXaml.DefaultExt=.sav; 14. sfdSaveXaml.Filter=Savedrtbfiles|*.rtb; 15. if(sfdSaveXaml.ShowDialog().Value) 16. 17. using(FileStream

25、fs=(FileStream)sfdSaveXaml.OpenFile() 18. 19. System.Text.UTF8Encodingenc=newSystem.Text.UTF8Encoding(); 20. bytebuffer=enc.GetBytes(rbtMyRichTextBox.Xaml); 21. fs.Write(buffer,0,buffer.Length); 22. fs.Close(); 23. 24. 25. private void Save_Click(object sender, RoutedEventArgs e) var uiElements = fr

26、om block in rbtMyRichTextBox.Blocks from inline in (block as Paragraph).Inlines where inline.GetType() = typeof(InlineUIContainer) select inline; if (uiElements.Count() != 0) MessageBox.Show(UIElements cannot be saved); return; SaveFileDialog sfdSaveXaml = new SaveFileDialog(); sfdSaveXaml.DefaultEx

27、t = .sav; sfdSaveXaml.Filter = Saved rtb files|*.rtb; if (sfdSaveXaml.ShowDialog().Value) using (FileStream fs = (FileStream)sfdSaveXaml.OpenFile() System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); byte buffer = enc.GetBytes(rbtMyRichTextBox.Xaml); fs.Write(buffer, 0, buffer.Length); fs.Close(); 因为RichTextBox不支持保存InlineUIContainer的元素,所以上面的代码中先将其排除,然后通过FileStream保存打开文件:这个与保存文件过程是相反的,只要将RichTextBox的Xaml属性设置为读出的XAML。1. privatevoidOpen_Click(objectsender,RoutedEventArgse) 2. 3. Ope

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论