版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、n16在多个不同大小的窗口中,查看同一个示例流文档的情况:随着显示区域的变化,调整,从而最好地利用可用空间。53.1 文档布局 类似HTML 文档的格式定义,更先进的布局选项。内置了很多的元素:Figure, Paragraph, Section, Floater, Table, InlineUIContainer等,可以通过不同的布局和元素,其显示方式。支持对图像,可以像在HTML中一样随意。默认支持的导航,显示模式,搜索。有四个控件对流文档提供支持: RichTextBox 可以编辑流文档内容; FlowDocumentPageViewer :以单独的页面显示流文档 FlowDocumen
2、tScrollViewer:以连续的流显示文档,通过滚动条导航 FlowDocumenter :组合了滚动查看器和页面查看器,让用户可以在两种之间切换。这是用于流文档的默认选项。43.1 文档布局 两大类别: 固定文档(FixedDocument)适用于“所见即所得”应用程序,打印和面向页面的内容。任何显示器显示的内容和格式,以及任何打印机打印的内容和格式完全相同。典型例子是字处理程序。 流文档(FlowDocument)屏幕显示,会根据窗口大小、分辨率和用户的选择,动态调整和重新排列 文档内容。还具有很多内置功能,搜索、能够优 化可读性的查看模式以及更改字体大小和外观的功能。3主要内容3 1
3、 文档布局3 2 RichTextBox控件3 3d实现编辑功能综合例子:文本编辑器框的使用:3.4 存取文件3.5 About框3.6 文本编辑器查找替换功能3.7 提示用户保存已被修改的文件3.8 打印和打印预览3 9 多选项卡页的文本编辑器2学习目的本章目的是建立一个文本编辑器,同时继续控件的用法。有两类文本编辑器: 单文档文本编辑器一次只能打开一个文件,如 果要打开另一个文件,必须关闭当前打开的文 件,微软的写字板程序就是单文档字处理程序。 多文档文本编辑器 同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。WPF使用Tab方式。1第三章WPF文本编辑器
4、WPF面向的是UI展现,文本显示无疑是UI层中的重要功能之一。n2123.3d实现编辑功能在WPF中,许多控件都自动集成了固有令集。比如文本框TextBox就提供了(Copy),粘贴(Paste),裁切(Cut),撤消(Undo)和重做(Redo)命令等。WPF已封装令类有:命令类示例命令Applicationds、Cut、Copy、Paste、Save、PrintNavigationdsBrowseForward、BrowseBack、Zoom、SearchEditingdsAlign、Move、SelectMediadsPlay、Pause、NextTrack、IncreaseVolume
5、、Record、StopComponentds Move、Select、Scroll、ExtendSelection113.3d实现编辑功能需要输入时,我们地会联想到键盘、鼠标、手写笔,其实还用一种高级别的输入命令(ds)。命令是一种语义级别的输入,而不是级别的,比如“”与“粘贴” 等等。在以往的.net版本中,要在界面上添加一个“粘贴” 按钮,是非常麻烦的事情,你得监视剪切板中是否有可用的文本,以及对应的文本框是否获得了焦点,以便启用或禁用该按钮,当粘贴时,你还得从剪切板中取得相应的文本,并到文本框的合理位置,等等。在WPF中提供令机制,定义了一系列的操作,在应用程序中可以直接使用,能非常简
6、单地实现这些任务,103.2 RichTextBox控件多格式文本控件,可用来输入和编辑文本。常用属性、和如下: 属性Selection:选定文本内容。 FontFamily、FontSize、FontStretch、FontStyle、FontWeight和Foreground:修改字符的字体属性。 属性Document:输入到控件中的内容。 属性AcceptsTab和AcceptsReturn:是否使用TAB键和回车键换行。 属性SpellCheck.IsEnabled:是否拼写检查。 TextChanged:RichTextBox控件内的内容被改变时发生的事件。 Copy、Cut、Pas
7、te、Redo和Undo:实现控件剪贴板功能和撤消、恢复命令。 SelectAll():RichTextBox为文本编辑控件时选择的全部内容。9 TextPointer 始终指向内容中的某个“位置”, 位置或落在内容中的字符之间,或者落在定义内容结构的流内容元素标记之间。 TextPointer常用如下: public int CompareTo( TextPointer position):比较位置顺序。 public TextPointerContext GetPointerContext( LogicalDirection direction): 返回和调用本的TextPointer类对
8、象相邻内容类别, TextPointerContext.None表示内容的开头或末尾相邻, TextPointerContext.Text表示和文本相邻,其他选项略。参数是LogicalDirection.Forward,表示其后部相邻的内容,LogicalDirection.Backward表示其前部相邻的内容。 public string GetTextInRun(LogicalDirection direction):得到相邻文本。 public TextPointer GetPositionAtOffset(int offset):移动到新位置,参数为移动偏移量。 public Tex
9、tPointer GetNextContextPosition(LogicalDirection direction):下一位置。7【例3.1】使用FlowDocumenter控件例子。所有查看控件,都必须使用 FlowDocument控件。 在其以包含诸如Section, Paragraph等,用来其层级显示模式。 Paragraph是段落标记,List是列表项标记,Table是表标记, WPF 流文档中没有 Image 块,图像以标准的 WPF Image 控件内嵌为 BlockUIContainer。如果希望图形被文字环绕,可将BlockUIContainer块标记放到Figuer或Fl
10、oates标记中,这两个标记就像 一个小型FlowDocument,不但可放入图像,也可放入其他对象,例如 表格。还可以有Section节标记等。ViewMode的属性, 可取的值为Page, TwoPage和Scroll,n318文档布局、RichTextBox控件、d(Applicationds )框的使用 OpenFileDialog SaveFileDialog PrintDialog MessageBox 自定义框 About Find / Replace17主要内容3 1 文档布局3 2 RichTextBox控件3 3d实现编辑功能综合例子:文本编辑器框的使用:3.4 存取文件3
11、.5 About框3.6 文本编辑器查找替换功能3.7 提示用户保存已被修改的文件3.8 打印和打印预览3 9 多选项卡页的文本编辑器初始化16选项改变15Comboxn 初始化n 选项改变14133.3d实现编辑功能【例3.2】本例在例2.37基础上增具条,在工具条上增加18个按钮,实现上述的编辑功能。(1) 继续例2.37。删除TextBox控件,先在窗体放置工具条,DockPanel.Dock=“Top”,增加RichTextBox控件。(2) 添加图形文件到项目:“添加(D)|新建文件夹(D)”Image,放入工具条按纽图标的图形文件。(3) 在工具条面板上增加18个按钮。 = 0)/
12、不等于负数,找到等于参数2字符串的子字符串 position = position.GetPositionAtOffset(indexInRun); break;/移到发现的子字符串开始处 else position = position.GetPositionAtOffset(1); else/否则,移到下一个元素所在位置position = position.GetNextContextPosition(LogicalDirection.Forward);return position; /查找结束,未找到,position=null二、主窗体38Window1类增加“查找” “替换”pu
13、blic void FindRichTextBoxString(string FindString) if ( postion.CompareTo( richTextBox1.Document.ContentEnd) 0) MessageBox.Show(已到文本底部,再次查找将从文本开始处查找,提示); postion = richTextBox1.Document.ContentStart;return; postion = FindWordFromPosition(postion, FindString); if (postion = null) MessageBox.Show(未找到匹
14、配字符串,再次查找将从文本开始处查找,提示);postion = richTextBox1.Document.ContentStart; else /找到匹配字符串 richTextBox1.Focus(); TextPointer postion1 = postion;postion=postion.GetPositionAtOffset(FindString.Length); richTextBox1.Selection.Select(postion1, postion);public void ReplaceRichTextBoxString(string ReplaceString)
15、if(!richTextBox1.Selection.IsEmpty) richTextBox1.Selection.Text=ReplaceString;/用参数的字符串,替换选中的文本37二、主窗体Window1类增加“查找” “替换”(21)为主窗体Window1类增加如下,该将被窗体FindReplace类的调用。public void FindRichTextBoxString(string FindString) /3种情况:到尾、找到、找不到(23)在Window1类中增加如下,该将被窗体FindReplace类的调用。public void ReplaceRichTextBox
16、String(string ReplaceString) (25)为Window1类增加变量:TextPointer postion=null, 用来下一次查找的开始位置。n8483.8.1 打印框PrintDialog使用WPF打印框PrintDialog 可以很容易地完成打印功能。其常用如下: ShowDialog():用此打开框,单击打印按钮,返回true。 public void PrinVisual(Visual visual, string description):visual指定非见对象, description为打印作业的说明。 public void PrintDocume
17、nt(DocumentPaginator documentPaginator,string description):打印参数1指定的DocumentPaginator对象,参数2为打印作业的说明。47框的使用 OpenFileDialog SaveFileDialog PrintDialog MessageBox 自定义框 About Find / Replace46(37) 为RichTextBox控件TextChanged增加处理函数如下:private void richTextBox1_TextChanged(objecder,TextChangedEventArgs e) bSav
18、e=true; (38) 窗体Window1的Closing是在关闭窗口之前产生的,此时窗体中的控件还,还可以保存修改的内容,也可以不。增加Closing的处理函数如下:private void Window_Closing(objecder,System.ComponentM .CancelEventArgs e) if( ! IfSaveOldFile() / 即不,程序继续运行e.Cancel=true;(39)编译运行45(36)修改菜单文件|另存为. 菜单项单击处理函数private void FileSaveAs_Item_Click(objecder, RoutedEventAr
19、gs e) SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = Rtf文件(*.Rtf)|*.rtf|所有文件(*.*)|*.*; if (saveFileDialog1.ShowDialog().Value) s_FileName = saveFileDialog1.FileName;using (FileStream fileStream = File.Create(s_FileName) TextRange textRange =new TextRange(richTextBox1
20、.Document.ContentStart, richTextBox1.Document.ContentEnd);textRange.Save(fileStream, DataFormats.Rtf); bSave = false; 44(33) 在菜单“文件|新建”函数第1条语句前 和文件|打开菜单项的函数第1条语句前增加如下语句:if( ! IfSaveOldFile()return; / /false马上返回,不执行后面语句(34) 在菜单文件|新建菜单项函数最后,在文件|打开菜单项textRange.Load语句后边增加语句:bSave = false;(35) 修改菜单文件|保存.
21、 菜单项单击处理函数如下:private void FileSave_Item_Click(objecder, RoutedEventArgs e) if (s_FileName.Length != 0)using (FileStream fileStream = File.Create(s_FileName) TextRange textRange =new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);textRange.Save(fileStream, DataFormats
22、.Rtf); bSave = false; elseFileSaveAs_Item_Click(sender, e); 433.7.2 提示保存已被修改的文件(31) 增加一个bool变量bSave=false标记文本是否被修改。(32) 增加一个函数,当前文件已被修改,用框询问用户是否保存当前文件,根据用户的选择作相应的处理。因为有三处要用到此函数。该函数定义如下:public bool IfSaveOldFile() bool ReturnValue = true; if (bSave) MessageBoxResult dr;dr = MessageBox.Show(要保存当前更改吗?,
23、 保存更改吗?, MessageBoxButton.YesNoCancel, MessageBoxImage.Question);switch (dr) case MessageBoxResult.Yes: FileSave_Item_Click(null, null);ReturnValue = true; bSave = false; break; case MessageBoxResult.No: ReturnValue = true; bSave = false; break; case MessageBoxResult.Cancel: ReturnValue = false; bre
24、ak; return ReturnValue; / false:本次操作取消; true:本次操作继续n954 (4)为主窗体Window1类增加一个新MakeNewTbpage()如下:private object MakeNewTbpage() TabItem tabItem1 = new TabItem(); tabControl1.Items.Add(tabItem1); tabItem1.Header = 第 + num.ToString() + 页; num+; Grid grid1 = new Grid();RichTextBox richTextBox1 = new RichT
25、extBox(); richTextBox1.Margin = new Thickness(10, 10, 10, 10); grid1.Children.Add(richTextBox1); tabItem1.Content = grid1;tabItem1.Focus();return (object)richTextBox1; (5)为主窗体菜单文件|新页菜单项增加单击函数private voidItem_Click(objecder, RoutedEventArgs e) MakeNewTbpage(); 53【例3.4】如设计一个有多个选项卡页文本编辑器,每选项卡页处理一个文档,并能
26、动态增加新选项卡页,关闭当前选项卡页。 (1)新建项目。放 控件到主窗体。为菜单增加顶级菜单项:文件,为其弹出菜单增加4个菜单项:新页、关闭当前页、打开、另存为。 (2)为Window1类增加变量选项卡编号:int num; (3)放TabControl控件到子窗体。删除初始选项卡页。52 (4)运行,可以看到多页,单击每页的标题,可以转换选项卡页。513.9 多选项卡页的文本编辑器【例3.3】如建立的应用程序选项卡页数固定,每选项卡页显示一行文本 (1)新建项目。放TabControl控件到子窗体。 (2)单击TabControl属性Items右侧标题为的按钮,打开集合编辑器:Items,单
27、击添加按钮,增加2个选项卡页, 修改属性Header分别为:第一页,第二页。 (3)选中第一页,可以在页中放置控件,例如放置TextBlock控件,属性Text=这是第一个选项卡页。同样在第二页中也放置TextBlock控件,属性Text=这是第二个选项卡页。如果放置RichTextBox控件,可以做文档编辑器。XAML标记如下。503.8.3 打印预览可使用DocumentViewer控件实现打印预览,须将FlowDocument文档转换为XPS文档。(41) 添加System.Printing和ReachFramework。(42) 在Window1.xaml.cs文件头部如下命名空间:u
28、sing System.Printing;using System.Windows.Xps; using System.IO.Packaging;using System.Windows.Xps.Packaging; using System.Windows.Xps.Serialization;(43) 参照3.5节,建立打印预览窗体。设定窗体文件名称为PrintPreview.xaml,属性Title=打印预览,在窗体中放置DocumentViewer控件,删除属性Margin,使控件充满客户区。(44) 为Window1窗体菜单的“文件”顶级菜单项的弹出菜单增加菜单 项:打印预览,Name
29、属性为FilePrintPreview_Item,“打印预览” 菜单项单击处理函数参见书上p106。493.8.2 打印(40)为“文件” 菜单增加菜单项:打印; 新建打印菜单项Click处理函数参考书上p104 private void FilePrintPreview_Item_Click(objecder,RoutedEventArgs e) PrintDialog pd =new PrintDialog( ); if( pd.showDialog = true) /PrinVisual() pd.PrintDocument()n 1060小结:框的使用 OpenFileDialog S
30、aveFileDialog PrintDialog MessageBox 自定义框 About Find / Replace59小结3 1 文档布局3 2 RichTextBox控件3 3d实现编辑功能综合例子:文本编辑器框的使用:3.4 存取文件3.5 About框3.6 文本编辑器查找替换功能3.7 提示用户保存已被修改的文件3.8 打印和打印预览3 9 多选项卡页的文本编辑器58 (10)编译运行,建立2个新页,在一页中输入若干字符, 保存该页,注意文件名要有扩展名(.RTF),在另一页中应能打开这个文件。关闭当前选项卡页。57 (9)主窗体菜单文件|另存为菜单项单击函数如下:priva
31、te voidItem_Click_3(objecder, RoutedEventArgs e) TabItem ti = tabControl1.SelectedItem as TabItem if (ti = null)return;SaveFileDialog saveFileDialog1 = new SaveFileDialog(); if (saveFileDialog1.ShowDialog().Value) Grid grid1 = ti.Content as Grid;RichTextBox richTextBox2 = grid1.Children0 as RichTextBox; String s1 = saveFileDialog1.FileName;using (FileStream fileStream = File.Create(s1) TextRange textRange =new TextRange( richTextBox2.Document.ContentStart, richTextBox2.Document.ContentEnd);textRange.Save(fileStream, DataFormats.Rtf);56if (openFileDialog1.ShowDialog().Value) Grid gr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-湖南-湖南客房服务员二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-湖南-湖南不动产测绘员一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-湖北-湖北殡葬服务工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-湖北-湖北土建施工人员一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-海南-海南计算机信息处理员一级高级技师历年参考题库含答案详解
- 2026事业单位工勤技能-海南-海南无损探伤工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-海南-海南农业技术员一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-浙江-浙江理疗技术员五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-浙江-浙江家禽饲养员五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-浙江-浙江中式面点师一级(高级技师)历年参考题库含答案详解
- 老年髋部骨折诊疗与管理指南2026年版
- 2026年重庆丰都县社区工作者招聘考试【结构化面试题库+高分答题模板】(含考官评分要点)
- 统编版九年级上册 道德与法治 第二单元《进入新时代》单元检测试卷(含答案)
- 2026江西九江长途汽车运输集团有限公司劳动合同制员工招聘4人考试模拟试题及答案解析
- 2026福汽集团审计稽核部招聘2人考试模拟试题及答案解析
- 四上2-8《呵护我们的器官》教学课件
- 新生儿PICC置管与维护技术
- CSCO肾癌诊疗指南2026
- 2025四川简阳农商行社会招聘笔试历年典型考题及考点剖析附带答案详解
- 2.2.1 中国的气候 课件(共37张)地理商务星球版(2024)八年级上册
- 变压器装配工岗中理论实操考核试卷含答案
评论
0/150
提交评论