RadFlowDocumentEditor
虽然RadFlowDocument可以通过使用文档元素的样式属性和子集合来创建和修改,这可能非常麻烦。RadFlowDocumentEditor目的是简化这个过程,用更少的代码实现相同的结果。当以正确的顺序插入两个文档元素以确保文档的完整性时,它也很有用——例如,在插入字段、超链接、图像等时。
创造与定位
RadFlowDocumentEditor始终与单个文档关联,在创建时将其作为构造函数参数。
例1:创建一个RadFlowDocumentEditor
RadFlowDocument文档= this.CreateDocument();RadFlowDocumentEditor编辑器=新的RadFlowDocumentEditor(文档);
编辑器在文档中维护一个内部位置。这个位置可以指向段落内(行内),也可以直接指向表格元素的末尾。下面是更改编辑器在文档中的位置的可用方法列表:
MoveToInlineStart (InlineBase内联)
MoveToInlineEnd (InlineBase内联)
MoveToParagraphStart(第一段)
MoveToTableEnd表(表)
来自的代码示例2演示如何将编辑器定位在文档第一段的第二行内。
例2:更改RadFlowDocumentEditor的位置
段落firstParagraph = document.EnumerateChildrenOfType<段落>().First();editor.MoveToInlineEnd (firstParagraph.Inlines [1]);
注意,可以创建一个RadFlowDocumentEditor对于空文档(没有章节的文档)。在这种情况下,在调用插入方法时自动创建节和段。示例3创建一个包含一个段落的文档,该段落的文本为“Hello word!”
例3:在文档中插入文本
RadFlowDocumentEditor编辑器=新的RadFlowDocumentEditor(新的RadFlowDocument());编辑器。InsertText(“你好词!”);
插入文档元素
的大多数插入方法RadFlowDocumentEditor返回新插入的元素。这样,如果需要,您可以设置元素的一些附加属性。
插入文本
插入文本运行可采用以下方法:
public执行InsertText(string text):插入一个新的运行与当前段落中的给定文本相匹配。
public运行InsertLine(string text):插入一个新的运行在当前段落中使用给定的文本,并开始一个新的段落。
这两个方法都返回新插入的数据运行元素。但是,如果text参数中有新行,则为每一行插入一个新段落。在本例中,返回的运行是插入的最后一个运行。
中的代码示例4插入包含新行的运行。
例4:用新行插入运行
编辑器。InsertText("First" +环境。NewLine +“Second”);
结果如下所示图1所示。
图1
当前的CharacterFormatting和ParagraphFormatting为创建的每个Run和段落应用。
插入段落
你可以重新开始段与InsertParagraph ()方法。当前的ParagraphFormatting应用于新段并返回该段。
例5:插入一个段落
编辑器。InsertText(第一段);editor.InsertParagraph ();编辑器。InsertText(第二段);
图2显示结果如何从示例5的样子。
图2:示例5中插入的内容
如果你打电话InsertParagraph ()当编辑器位于段落中间时,该位置后的所有内联都将移动到新段落中。在文本编辑器应用程序中,当光标位于段落中间时,其效果与按Enter键相同。
插入部分
插入部分元素可以通过InsertSection ()方法。将添加具有新节属性的段落,并添加新的部分元素将返回。
例6:插入一个section
editor.InsertSection ();
如果你致电InsertSection ()方法,而编辑器位于TableCell中,则该表将在当前行被分割。这意味着,如果表包含3行,而编辑器位于第二行的单元格中,则表将被分割为两个表——一个有一行,将被添加到前一节,另一个有2行(包含编辑器位置所在的TableCell)。后者将被添加到新插入的Section中。
插入超链接
超链接在RadFlowDocument模型实际上是字段,这意味着它们的代码和结果部分由FieldCharacter内联。插入超链接被简化了RadFlowDocumentEditor.InsertHyperlink ()方法:
(string text, string uri, bool isAnchor, string toolTip)
类中没有显式设置样式,则会自动将"Hyperlink"内置样式应用于插入的超链接CharacterFormatting编辑器的选项。
例7:插入一个超链接
编辑器。InsertHyperlink(“telerik”、“//www.aliitrade.com, false,“Telerik site”);
图3:超链接
插入代码字段
字段的插入可以使用InsertField ()方法,该方法接受代码和结果片段:
InsertField(字符串代码,字符串结果)
示例8演示如何在文档头中添加页码:
例8:在页眉中添加页码
//创建header并移动编辑器header header = document.Sections[0].Headers.Add();editor.MoveToParagraphStart (header.Blocks.AddParagraph ());编辑器。InsertText(“页面”);编辑器。InsertField(“页面”,“1”);编辑器。InsertText(" of ");编辑器。InsertField(“NUMPAGES”,“1”);
图4:示例8中插入的页编号
注意,在这种情况下,当在MS Word中打开文档时,结果会自动更新,因为页面字段位于文档的头部。
您可以在Office Open XML标准文档中找到一个广泛的字段代码列表ecma - 376第4版,2012年12月,第17.16.6章字段定义。
插入图片
RadFlowDocumentEditor提供用于插入的几个方法ImageInline和FloatingImage.它们都返回插入的图像元素,以便对其进行其他操作。
InsertImageInline(ImageSource source, Size Size)
InsertImageInline(流,字符串扩展,大小大小)
InsertFloatingImage(ImageSource source, Size Size)
InsertFloatingImage(流流,字符串扩展,大小大小)
例9展示了如何使用流插入图像:
例9:从流中插入图像
editor.InsertText(“形象:”);使用(Stream Stream = this.GetResourceStream("Telerik_logo.png")){编辑器。InsertImageInline(流,"png",新的大小(118,28));}
图5:示例9中插入的图像
插入表
可以使用以下方法进行插入表格在文件中:
- public Table InsertTable():在文档中插入一个空表。
- public Table InsertTable(int rows, int columns):插入指定行数和列数的表。
属性指定的格式TableFormatting属性应用于插入的表。在插入操作之后,编辑器会自动直接放置后插入的表(不在其中)。
下面是如何插入一个内置样式为"TableGrid"的表格:
例10:插入一个具有样式的表
document.StyleRepository.AddBuiltInStyle (BuiltInStyleNames.TableGridStyleId);editor.TableFormatting.StyleId = BuiltInStyleNames.TableGridStyleId;编辑器。InsertText(“表之前。”);编辑器。InsertTable(2、4);编辑器。表后InsertText(“。”);
图6:文档中的表格
的DocumentElementImporter类允许您将文档元素从一个文档导入到另一个文档。请检查这篇文章有关此功能的更多信息。
改变当前样式
类的插入方法时RadFlowDocumentEditor编辑器创建不同的文档元素。您可以通过以下属性控制新创建元素的格式:
CharacterFormatting:此格式应用于所有新创建的格式运行元素。控件中未设置样式时,才会将“Hyperlink”内置样式应用于生成的片段CharacterFormatting.
ParagraphFormatting:此格式应用于所有新创建的格式段元素。这也包括插入的段落InsertText ()和InsertLine ()方法。
TableFormatting:此格式应用于所有新创建的格式表格元素。
当插入多个样式一致的元素时,格式化选项最有用。例如,来自的代码例11插入多个段落,段落之间没有空格,文本(运行)为"Consolas"字体:
例11:插入具有指定样式的内容
//设置代码块格式化var codeFont = new ThemableFontFamily(new FontFamily("Consolas"));editor.CharacterFormatting.FontFamily.LocalValue = codeFont;editor.ParagraphFormatting.SpacingAfter.LocalValue = 0;编辑器。InsertLine("static void Main(string[] args)");editor.InsertLine(“{”);编辑器。InsertLine(“控制台。WriteLine(\“Hello World \”);”);editor.InsertLine(“}”);
图7:示例11中插入的内容
删除内容
例12:删除现有元素之间的内容
var document = new RadFlowDocument();var editor = new RadFlowDocumentEditor(文档);editor.InsertParagraph ();var startRun = editor.InsertText("Start");editor.InsertParagraph ();var middleRun = editor.InsertText("Middle");editor.InsertParagraph ();var endRun = editor.InsertText("End");编辑器。deleteccontent (startRun, endRun, false);