演练:使用内容控件创建模板
本演练演示如何创建使用内容控件在 Microsoft Office Word 模板中创建可重用结构化内容的文档级自定义项。
适用于: 本主题中的信息适用于 Word 的文档级项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。
Word 使你能够创建可重用文档部件的集合,即命名 的构建基块。 本演练演示如何将两个表格作为构建基块创建。 每个表格包含几个内容控件,可以容纳不同类型的内容(如纯文本或日期)。 其中一个表格包含有关员工的信息,另一个表格包含客户反馈。
从模板创建文档后,可通过使用几个 BuildingBlockGalleryContentControl 对象将任一表格添加到文档,这些对象显示模板中的可用构建基块。
本演练阐释了以下任务:
在设计时创建包含 Word 模板中内容控件的表格。
以编程方式填充组合框内容控件和下拉列表内容控件。
阻止用户编辑指定表格。
将表格添加到模板的构建基块集合。
创建一个内容控件来显示模板中的可用构建基块。
注意
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 IDE。
先决条件
你需要满足以下条件才能完成本演练:
Visual Studio 的一个版本,其中包含 Microsoft Office 开发人员工具。 有关详细信息,请参阅配置计算机以开发办公室解决方案。
Microsoft Word。
创建新的 Word 模板项目
创建 Word 模板,以便用户可以轻松地创建他们自己的副本。
创建新的 Word 模板项目
创建名为 MyBuildingBlockTemplate 的 Word 模板项目。 在向导中,选择在解决方案中创建新的文档。 有关详细信息,请参阅“如何:在 Visual Studio 中创建办公室项目。
Visual Studio 将在设计器中打开新的 Word 模板,并将 MyBuildingBlockTemplate 项目添加到解决方案资源管理器。
创建员工表
创建一个包含四种不同类型的内容控件的表格,用户可以在其中输入有关员工的信息。
创建员工表
在 Visual Studio 设计器中托管的 Word 模板中,在功能区上,单击“ 插入 ”选项卡。
在“表”组中,单击“表”,然后插入包含两列和四行的表。
在第一列中键入文本,使之类似于以下列:
员工姓名 雇佣日期 标题 图片 单击第二列中的第一个单元格(员工姓名旁)。
在功能区上,单击 “开发人员” 选项卡。
注意
如果看不到 “开发人员” 选项卡,则必须首先显示它。 有关详细信息,请参阅 “如何:在功能区上显示开发人员”选项卡。
在“控件”组中,单击“文本”按钮以向第一个单元格添加一个PlainTextContentControl。
单击第二列中的第二个单元格(“雇用日期”旁)。
在“控件”组中,单击“日期选取器”按钮,向第二个单元格添加一个DatePickerContentControl。
单击第二列中的第三个单元格(标题旁)。
在 “控件 ”组中,单击“ 组合框 ”按钮 将 a 添加到第三个 ComboBoxContentControl 单元格。
单击第二列中的最后一个单元格(图片旁边)。
在 “控件 ”组中,单击“ 图片内容控件 ”按钮 ,将一个单元格添加到最后一个 PictureContentControl 单元格。
创建客户反馈表
创建一个包含三种不同类型的内容控件的表格,用户可以在其中输入客户反馈信息。
创建客户反馈表
在 Word 模板中,单击前面添加的员工表后面的行,然后按 Enter 添加新段落。
在功能区上,单击“ 插入 ”选项卡。
在“表”组中,单击“表”,然后插入包含两列和三行的表。
在第一列中键入文本,使之类似于以下列:
客户名称 满意度分级 注释 单击第二列的第一个单元格(客户名称旁)。
在功能区上,单击 “开发人员” 选项卡。
在“控件”组中,单击“文本”按钮以向第一个单元格添加一个PlainTextContentControl。
单击第二列的第二个单元格(“满意度评分”旁)。
在“控件”组中,单击“下拉列表”按钮,向第二个单元格添加一个DropDownListContentControl。
单击第二列的最后一个单元格(批注旁)。
在“控件”组中,单击“格式文本”按钮,向最后一个单元格添加一个RichTextContentControl。
以编程方式填充组合框和下拉列表
可以使用 Visual Studio 中的“属性”窗口在设计时初始化内容控件。 还可以在运行时初始化它们,这使你可以动态设置其初始状态。 在本演练中,使用代码填充运行时和DropDownListContentControl运行时的条目ComboBoxContentControl,以便查看这些对象的工作原理。
以编程方式修改内容控件的 UI
在解决方案资源管理器中,右键单击 ThisDocument.cs 或 ThisDocument.vb,然后单击“查看代码”。
将以下代码添加到
ThisDocument
类。 此代码声明了几个对象,你稍后将在本演练中使用它们。将以下代码添加到
ThisDocument
类的ThisDocument_Startup
方法。 此代码将条目添加到表格中的 ComboBoxContentControl 和 DropDownListContentControl,并在用户进行编辑前设置每个控件中显示的占位符文本。comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own"; comboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0); comboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1); comboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2); dropDownListContentControl1.PlaceholderText = "Choose a rating (1 lowest, 3 highest)"; dropDownListContentControl1.DropDownListEntries.Add("1", "1", 0); dropDownListContentControl1.DropDownListEntries.Add("2", "2", 1); dropDownListContentControl1.DropDownListEntries.Add("3", "3", 2);
阻止用户编辑员工表
使用你之前声明的 GroupContentControl 对象保护员工表。 保护员工表后,用户仍可编辑该表格中的内容控件。 但是,他们无法编辑第一列中的文本或以其他方式修改该表格,如添加或删除行和列。 有关如何使用 a GroupContentControl 保护文档部分的详细信息,请参阅 内容控件。
阻止用户编辑员工表
将以下代码添加到
ThisDocument
类的ThisDocument_Startup
方法中上一步添加的代码之后。 此代码可防止用户通过将表格置于你之前声明的 GroupContentControl 对象之中来编辑员工表。
将表添加到构建基块集合
将表格添加到模板中的文档构建基块集合,使用户可以将你创建的表格插入到文档中。 有关文档构建基块的详细信息,请参阅 内容控件。
将表格添加到模板中的构建基块
将以下代码添加到
ThisDocument
类的ThisDocument_Startup
方法中上一步添加的代码之后。 此代码将包含表的新构建基块添加到 Microsoft。办公室。Interop.Word.BuildingBlockEntries 集合,其中包含模板中的所有可重用构建基块。 新的构建基块在名为 Employee 和 Customer Information 的新类别中定义,并分配构建基块类型Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1
。Word.Template template1 = this.AttachedTemplate as Word.Template; if (template1 != null) { object description = null; template1.BuildingBlockEntries.Add("Employee Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[1].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent); template1.BuildingBlockEntries.Add("Customer Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[2].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent); }
将以下代码添加到
ThisDocument
类的ThisDocument_Startup
方法中上一步添加的代码之后。 此代码将从模板删除表格。 将不再需要表格,因为已在模板中将其添加到可重用构建基块库。 代码首先将文档设置为设计模式,从而可以删除受保护的员工表。
创建显示构建基块的内容控件
创建一个内容控件,用于提供对先前创建的构建基块(即表格)的访问权限。 用户可以单击此控件以将表格添加到文档。
创建显示构建基块的内容控件
将以下代码添加到
ThisDocument
类的ThisDocument_Startup
方法中上一步添加的代码之后。 此代码将初始化之前声明的 BuildingBlockGalleryContentControl 对象。 显示BuildingBlockGalleryContentControl“员工”和“客户信息”类别中定义的所有构建基块,以及具有构建基块类型Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1
。buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl( this.Paragraphs[1].Range, "buildingBlockControl1"); buildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information"; buildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl1.PlaceholderText = "Choose your first building block"; buildingBlockControl2 = this.Controls.AddBuildingBlockGalleryContentControl( this.Paragraphs[2].Range, "buildingBlockControl2"); buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information"; buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl2.PlaceholderText = "Choose your second building block";
测试项目
用户可以单击文档中的构建基块库控件,以插入员工表或客户反馈表。 用户可以在两个表的内容控件中键入或选择响应。 用户可以修改客户反馈表的其他部分,但应无法修改员工表的其他部分。
测试员工表
按 F5 运行项目。
单击“ 选择第一个构建基块 ”以显示第一个构建基块库内容控件。
单击控件中自定义库 1 标题旁边的下拉箭头,然后选择“员工表”。
在“员工姓名”单元格右侧的单元格中单击,然后键入名称。
验证你只能向此单元格添加纯文本。 PlainTextContentControl 仅允许用户添加纯文本,不允许添加其他类型的内容(如图片或表格)。
单击“雇用日期”单元格右侧的单元格,然后在日期选取器中选择日期。
单击标题单元格右侧的单元格,然后在组合框中选择其中一个职务。
也可以键入列表中不存在的职务名称。 此操作可行的原因是 ComboBoxContentControl 允许用户从条目列表中选择或键入自己的条目。
单击图片单元格右侧的单元格中的图标,并浏览到图像以显示它。
尝试向表中添加行或列,并尝试从表中删除行和列。 验证你无法修改该表格。 GroupContentControl 将阻止你进行任何修改。
测试客户反馈表
单击“ 选择第二个构建基块 ”以显示第二个构建基块库内容控件。
单击控件中 自定义库 1 标题旁边的下拉箭头,然后选择“ 客户表”。
单击客户名称单元格右侧的单元格,然后键入名称。
单击“满意度评分”单元格右侧的单元格,然后选择其中一个可用选项。
验证你无法键入自己的条目。 DropDownListContentControl 仅允许用户从条目列表中进行选择。
在“批注”单元格右侧的单元格中单击,然后键入一些批注。
也可以添加文本以外的内容,如图像或嵌入式表格。 此操作可行的原因是 RichTextContentControl 允许用户添加文本以外的内容。
验证你可以向表中添加行或列,且可以从表中删除行和列。 此操作可行的原因是你没有通过将表格置于 GroupContentControl 来保护它。
关闭模板。
后续步骤
可从以下主题了解有关如何使用内容控件的更多信息:
- 将内容控件绑定到嵌入到文档中的 XML 片段(也称为自定义 XML 部件)。 有关详细信息,请参阅 演练:将内容控件绑定到自定义 XML 部件。