演练:使用内容控件创建模板

本演练演示如何创建文档级自定义,该自定义项使用内容控件在 Microsoft Office Word 模板中创建结构化和可重用的内容。

适用于: 本主题中的信息适用于 Word 的文档级项目。 有关详细信息,请参阅 Office 应用程序和项目类型提供的功能

Word 使你能够创建可重用文档部件的集合,即命名 的构建基块。 本指南演示如何创建两个表作为构建块。 每个表都包含多个可以保存不同类型的内容的内容控件,例如纯文本或日期。 其中一个表包含有关员工的信息,另一个表包含客户反馈。

从模板创建文档后,可以使用多个 BuildingBlockGalleryContentControl 对象将其中一个表添加到文档中,这些对象在模板中显示可用的构建基块。

本演练阐释了以下任务:

  • 在设计时在 Word 模板中创建包含内容控件的表。

  • 以编程方式填充组合框内容控件和下拉列表内容控件。

  • 阻止用户编辑指定的表。

  • 将表添加到模板的组成部分集合中。

  • 创建一个内容控件来展示模板中可用的构件。

    注释

    以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅 个性化设置 IDE

先决条件

你需要满足以下条件才能完成本演练:

创建新的 Word 模板项目

创建 Word 模板,以便用户可以轻松创建自己的副本。

创建新的 Word 模板项目

  1. 创建名为 MyBuildingBlockTemplate 的 Word 模板项目。 在向导中创建解决方案中的新文档。 有关详细信息,请参阅 如何:在 Visual Studio 中创建 Office 项目

    Visual Studio 将在设计器中打开新的 Word 模板,并将 MyBuildingBlockTemplate 项目添加到 解决方案资源管理器

创建员工表

创建一个表,其中包含四种不同类型的内容控件,用户可以在其中输入有关员工的信息。

创建员工表

  1. 在 Visual Studio 设计器中托管的 Word 模板中,在功能区上,单击“ 插入 ”选项卡。

  2. “表 ”组中,单击“ ”,然后插入包含两列和四行的表。

  3. 在第一列中输入文本,使其与以下列相似:

    员工姓名
    雇佣日期
    标题
    图片
  4. 单击第二列中的第一个单元格( 员工姓名旁)。

  5. 在功能区上,单击“ 开发人员 ”选项卡。

    注释

    如果 “开发人员 ”选项卡不可见,必须先显示它。 有关详细信息,请参阅 “如何:在功能区上显示开发人员”选项卡

  6. 控件 组中,单击 “文本 ”按钮 PlainTextContentControl 以向第一个单元格添加一个 PlainTextContentControl

  7. 单击第二列中的第二个单元格( “雇用日期”旁)。

  8. “控件 ”组中,单击 “日期选取器 ”按钮 DatePickerContentControl 以向第二个单元格添加 a DatePickerContentControl

  9. 单击第二列中的第三个单元格(标题旁)。

  10. “控件”组中,单击“组合框”按钮 ComboBoxContentControl,以在第三个单元格中添加一个ComboBoxContentControl

  11. 单击第二列中的最后一个单元格( 图片旁边)。

  12. “控件 ”组中,单击 “图片内容控件 ”按钮 PictureContentControl 以向最后一个单元格添加一个 PictureContentControl

创建客户反馈表

创建一个表,其中包含三种不同类型的内容控件,用户可以在其中输入客户反馈信息。

创建客户反馈表

  1. 在 Word 模板中,单击前面添加的员工表后面的行,然后按 Enter 添加新段落。

  2. 在功能区上,单击“ 插入 ”选项卡。

  3. “表 ”组中,单击“ ”,然后插入包含两列和三行的表。

  4. 在第一列中输入文本,使其与以下列相似:

    客户名称
    满意度分级
    注释
  5. 单击第二列的第一个单元格( 客户名称旁)。

  6. 在功能区上,单击“ 开发人员 ”选项卡。

  7. 控件 组中,单击 “文本 ”按钮 PlainTextContentControl 以向第一个单元格添加一个 PlainTextContentControl

  8. 单击第二列的第二个单元格( “满意度评分”旁)。

  9. “控件”组中,单击“下拉列表(Drop-Down List)”按钮DropDownListContentControl以向第二个单元格添加DropDownListContentControl

  10. 单击第二列的最后一个单元格( 批注旁)。

  11. “控件”组中,单击“富文本”按钮RichTextContentControl,以将RichTextContentControl添加到最后一个单元格中。

以编程方式填充组合框和下拉列表

可以使用 Visual Studio 中的 “属性” 窗口在设计时初始化内容控件。 还可以在运行时初始化它们,这使你可以动态设置其初始状态。 在本次演练中,使用代码在运行时为ComboBoxContentControlDropDownListContentControl填充条目,从而查看这些对象的工作原理。

以编程的方式修改内容控件的用户界面

  1. 解决方案资源管理器中,右键单击 ThisDocument.csThisDocument.vb,然后单击“ 查看代码”。

  2. 将以下代码添加到 ThisDocument 类。 此代码声明了稍后在本演练中使用的多个对象。

    private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl2;
    
  3. 将以下代码添加到ThisDocument类的ThisDocument_Startup方法中。 此代码将在 ComboBoxContentControlDropDownListContentControl 表中添加条目,并设置这些控件在用户编辑之前显示的占位符文本。

    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 保护文档部分的详细信息,请参阅 内容控件

防止用户编辑员工表

  1. 在上一步添加代码后,将以下代码添加到 ThisDocument_Startup 类的 ThisDocument 方法中。 此代码通过将表放在前面声明的对象中 GroupContentControl 来防止用户编辑员工表。

    this.Tables[1].Range.Select();
    groupControl1 = this.Controls.AddGroupContentControl("groupControl1");
    

将表添加到构件集合

将表添加到模板中的文档构建基块集合中,以便用户可以将已创建的表插入文档中。 有关文档构建基块的详细信息,请参阅 内容控件

将表添加到模板中的构建基块

  1. 在上一步中添加的代码之后,将以下代码添加到 ThisDocument 类的方法 ThisDocument_Startup 中。 此代码将包含表的新构建基块添加到 Microsoft.Office.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);
    }
    
  2. 请在您上一步添加的代码后,将以下代码添加到ThisDocument_Startup类的ThisDocument方法。 此代码从模板中删除表。 因为已将这些表添加到模板中的可重用模块库中,所以不再需要它们。 代码首先将文档置于设计模式,以便可以删除受保护的员工表。

    if (!this.FormsDesign)
    {
        this.ToggleFormsDesign();
    }
    this.Tables[2].Delete();
    this.Tables[1].Delete();
    this.ToggleFormsDesign();
    

创建显示构建基块的内容控件

创建一个内容控件,用于提供对之前创建的构建基块(即表)的访问权限。 用户可以单击此控件将表添加到文档中。

创建一个显示构件的内容控件

  1. 在上一步中添加的代码之后,将以下代码添加到 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";
    

测试项目

用户可以单击文档中的构建基块库控件以插入员工表或客户反馈表。 用户可以在两个表中的内容控件中键入或选择响应。 用户可以修改客户反馈表的其他部分,但不应修改员工表的其他部分。

测试员工表

  1. F5 运行项目。

  2. 单击“ 选择第一个构建基块 ”以显示第一个构建基块库内容控件。

  3. 单击控件中 自定义库 1 标题旁边的下拉箭头,然后选择 “员工表”。

  4. “员工姓名” 单元格右侧的单元格中单击,然后键入名称。

    验证是否只能向此单元格添加文本。 允许用户 PlainTextContentControl 仅添加文本,而不能添加其他类型的内容,如艺术或表格。

  5. 单击 “雇用日期” 单元格右侧的单元格,然后在日期选取器中选择日期。

  6. 单击标题单元格右侧的单元格,然后在组合框中选择其中一个职位。

    (可选)键入不在列表中的职务的名称。 这是可能的, ComboBoxContentControl 因为允许用户从条目列表中选择或键入自己的条目。

  7. 单击 图片 单元格右侧的单元格中的图标,并浏览到图像以显示它。

  8. 尝试向表添加行或列,并尝试从表中删除行和列。 验证是否无法修改表。 这 GroupContentControl 可以防止你进行任何修改。

测试客户反馈表

  1. 单击“ 选择第二个构建基块 ”以显示第二个构建基块库内容控件。

  2. 单击控件中 自定义库 1 标题旁边的下拉箭头,然后选择 “客户表”。

  3. 单击 客户名称 单元格右侧的单元格,然后键入名称。

  4. 单击 “满意度评分 ”单元格右侧的单元格,然后选择其中一个可用选项。

    验证您无法输入自定义条目。 这个DropDownListContentControl允许用户仅从条目列表中选择。

  5. “批注 ”单元格右侧的单元格中单击,然后键入一些批注。

    (可选)添加文本以外的某些内容,如艺术或嵌入表格。 因为用户能够添加文本以外的内容,RichTextContentControl 使这成为可能。

  6. 验证是否可以向表添加行或列,以及是否可以从表中删除行和列。 这之所以可能,是因为你没有通过将表格放入GroupContentControl来进行保护。

  7. 关闭模板。

后续步骤

可以详细了解如何使用本主题中的内容控件: