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

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

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

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

从模板创建文档后,可通过使用几个 BuildingBlockGalleryContentControl 对象将任一表格添加到文档,这些对象显示模板中的可用构建基块。

本演练阐释了以下任务:

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

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

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

  • 将表格添加到模板的构建基块集合。

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

    注意

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

先决条件

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

创建新的 Word 模板项目

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

创建新的 Word 模板项目

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

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

创建员工表

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

创建员工表

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

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

  3. 在第一列中键入文本,使之类似于以下列:

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

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

    注意

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

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

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

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

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

  10. “控件 ”组中,单击“ 组合框 ”按钮 ComboBoxContentControl 将 a 添加到第三个 ComboBoxContentControl 单元格。

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

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

创建客户反馈表

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

创建客户反馈表

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

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

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

  4. 在第一列中键入文本,使之类似于以下列:

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

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

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

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

  9. 在“控件”组中,单击“下拉列表”按钮DropDownListContentControl,向第二个单元格添加一个DropDownListContentControl

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

  11. 在“控件”组中,单击“格式文本”按钮RichTextContentControl,向最后一个单元格添加一个RichTextContentControl

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

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

以编程方式修改内容控件的 UI

  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 类的 ThisDocument_Startup 方法中上一步添加的代码之后。 此代码可防止用户通过将表格置于你之前声明的 GroupContentControl 对象之中来编辑员工表。

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

将表添加到构建基块集合

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

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

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

    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. 关闭模板。

后续步骤

可从以下主题了解有关如何使用内容控件的更多信息: