Поделиться через


Пошаговое руководство. Привязка элементов управления содержимым к пользовательским XML-частям

В данном пошаговом руководстве описаны способы привязки элементов управления содержимым в настройках на уровне документа Word к данным XML, хранящимся в документе.

Применение. Сведения этого раздела применяются к проектам уровня документа для Word 2013 и Word 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.

Word позволяет хранить данные XML, называемые пользовательской XML-частью в документе.Можно управлять отображением этих данных с помощью привязки элементов управления к элементам в пользовательской XML-части.Пример документа в этом руководства отображает данные о сотрудниках, которые хранятся в пользовательской XML-части.При открытии документа элементы управления содержимым отображают значения XML-элементов.Все изменения текста в элементах управления содержимым сохраняются в пользовательской XML-части.

В данном пошаговом руководстве рассмотрены следующие задачи:

  • Добавление элементов управления содержимым в документ Word в проекте уровня документа во время разработки.

  • Создание файла данных XML и схемы XML, определяющей элементы, которые необходимо привязать к элементам управления содержимым.

  • Прикрепление схемы XML к документу во время разработки.

  • Добавление содержимого файла XML к пользовательской XML-части в документе во время выполнения.

  • Привязка элементов управления содержимым к элементам пользовательской XML-части.

  • Привязка элемента управления DropDownListContentControl к набору значений, заданных в схеме XML.

ПримечаниеПримечание

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Обязательные компоненты

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

-

Выпуск Visual Studio 2012, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в разделе [Настройка компьютера для разработки решений Office](bb398242\(v=vs.110\).md).
  • Word 2013 или Word 2010.

ссылка на видео Видеоверсия этого раздела доступна на веб-странице Video How to: Binding Content Controls to Custom XML Parts.

Создание нового проекта документа Word

Создайте документ Word, который будет использоваться в пошаговом руководстве.

Чтобы создать новый проект документа Word

  • Создайте проект документа Word с именем EmployeeControls.Создайте новый документ для решения.Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Office в Visual Studio.

    Среда Visual Studio откроет новый документ Word в режиме конструктора и добавит проект "EmployeeControls" в Обозреватель решений.

Добавление элементов управления содержимым к документу Word

Создайте таблицу, содержащую три различных типа элементов управления содержимым, в которых пользователь сможет просматривать или редактировать данные о сотруднике.

Добавление элементов управления содержимым к документу

  1. В документе Word, который размещен в конструкторе Visual Studio, на ленте, щелкните вкладку Вставить.

  2. В группе Таблицы нажмите Таблица и вставьте таблицу с 2 столбцами и 3 строками.

  3. Введите текст в первом столбце, как показано ниже.

    Имя сотрудника

    Дата приема на работу

    Заголовок

  4. Во втором столбце таблицы щелкните первую строку (после текста Имя сотрудника).

  5. В ленте щелкните вкладку Разработчик.

    ПримечаниеПримечание

    Если вкладка Разработчик не отображается в ленте, то ее следует сначала отобразить.Дополнительные сведения см. в разделе Практическое руководство. Отображение вкладки разработчика на ленте.

  6. В группе Элементы управления нажмите кнопку ТекстPlainTextContentControl, чтобы добавить элемент управления PlainTextContentControl в первую ячейку.

  7. Во втором столбце таблицы щелкните вторую строку (после текста Дата приема на работу).

  8. В группе Элементы управления нажмите кнопку Выбор датыDatePickerContentControl, чтобы добавить элемент управления DatePickerContentControl во вторую ячейку.

  9. Во втором столбце таблицы щелкните третью строку (после текста Должность).

  10. В группе Элементы управления нажмите кнопку Раскрывающийся списокDropDownListContentControl, чтобы добавить элемент управления DropDownListContentControl в последнюю ячейку.

Это и будет весь интерфейс пользователя для данного проекта.Если запустить проект сейчас, то можно будет ввести текст в первой строке и выбрать дату во второй.Следующий шаг — прикрепление данных, которые необходимо отобразить в документе, к файлу XML.

Создание файла данных XML.

Как правило, данные XML для хранения в настраиваемой XML-части получаются из внешнего источника, например, из фала или базы данных.В ходе данного пошагового руководства будет создан файл данных XML, содержащий данные о сотруднике, помеченные элементами, которые необходимо привязать к элементам управления содержимым в документе.Чтобы обеспечить доступ к данным во время выполнения, следует включить файл XML в сборку ресурсов настройки в качестве ресурса.

Создание файла данных

  1. В меню Проект выберите команду Добавить новый элемент.

    Открывается диалоговое окно Добавление нового элемента.

  2. Затем в области Шаблоны выберите XML-файл.

  3. Присвойте файлу имя employees.xml и выберите команду Добавить.

    В редакторе кода открывается файл employees.xml.

  4. Замените содержимое файла employees.xml следующим текстом.

    <?xml version="1.0" encoding="utf-8" ?>
    <employees xmlns="https://schemas.microsoft.com/vsto/samples">
      <employee>
        <name>Karina Leal</name>
        <hireDate>1999-04-01</hireDate>
        <title>Manager</title>
      </employee>
    </employees>
    
  5. Щелкните файл employees.xml в обозревателе решений.

  6. В окне Свойства выберите свойство Действие при построении и измените его значение на Внедренный ресурс.

    На этом шаге XML-файл внедряется в сборку как ресурс при построении проекта.Это позволяет получить доступ к содержимому XML-файла во время выполнения.

Создание схемы XML

Чтобы привязать элемент управления содержимым к одному элементу в пользовательской XML-части, необязательно использовать схему XML.Но чтобы связать элемент управления DropDownListContentControl с набором значений, необходимо создать схему XML, проверяющую файл данных XML, созданный ранее.Схема XML задает возможные значения для элемента title.В данном пошаговом руководстве DropDownListContentControl будет привязан к этому элементу позднее.

Создание схемы XML

  1. В меню Проект выберите команду Добавить новый элемент.

    Открывается диалоговое окно Добавление нового элемента.

  2. Затем в области Шаблоны выберите Схема XML.

  3. Назовите схему employees.xsd и нажмите кнопку Добавить.

    Откроется окно конструктора схемы.

  4. В обозревателе решений щелкните правой клавишей мыши employees.xsd, а затем выберите команду Просмотреть код.

  5. Замените содержимое файла employees.xsd следующей схемой.

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema xmlns="https://schemas.microsoft.com/vsto/samples" 
        targetNamespace="https://schemas.microsoft.com/vsto/samples"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">
      <xs:element name="employees" type="EmployeesType"></xs:element>
      <xs:complexType name="EmployeesType">
        <xs:all>
          <xs:element name="employee" type="EmployeeType"/>
        </xs:all>
      </xs:complexType>
      <xs:complexType name="EmployeeType">
        <xs:sequence>
          <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="hireDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
          <xs:element name="title" type="TitleType" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
      <xs:simpleType name="TitleType">
        <xs:restriction base="xs:string">
          <xs:enumeration value ="Engineer"/>
          <xs:enumeration value ="Designer"/>
          <xs:enumeration value ="Manager"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:schema>
    
  6. Чтобы сохранить файл employees.xml и employees.xsd, в меню Файл выберите команду Сохранить все.

Прикрепление схемы XML к документу

Необходимо прикрепить схему XML к документу, чтобы привязать элемент управления DropDownListContentControl к корректным значениям элемента title.

Прикрепление схемы XML к документу

  1. Активируйте файл EmployeeControls.docx в конструкторе.

  2. В ленте щелкните вкладку Разработчик.

  3. В группе XML нажмите кнопку Схема.

  4. В диалоговом окне Шаблоны и надстройки перейдите на вкладку Схема XML и выберите Добавление схемы.

  5. Найдите схему employees.xsd, созданную ранее и расположенную в папке проекта, и нажмите Открыть.

  6. В диалоговом окне Параметры схемы нажмите кнопку ОК.

  7. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Шаблоны и надстройки.

    Открывается область задач Структура ХML.

  8. Закройте область задач Структура ХML.

Добавление пользовательской XML-части к документу

Перед привязкой элементов управления содержимым к элементам XML-файла необходимо добавить его содержимое к новой пользовательской XML-части в документе.

Добавление пользовательской XML-части к документу

  1. В Обозревателе решений щелкните правой кнопкой мыши файл ThisDocument.cs или ThisDocument.vb, а затем нажмите Просмотреть код.

  2. Добавьте в класс ThisDocument следующие объявления.В этом коде объявляются несколько объектов, используемые для добавления пользовательской XML-части к документу.

    <Cached()> _
    Public employeeXMLPartID As String = String.Empty
    Private employeeXMLPart As Office.CustomXMLPart
    Private Const prefix As String = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'"
    
    [CachedAttribute()]
    public string employeeXMLPartID = string.Empty;
    private Office.CustomXMLPart employeeXMLPart;
    private const string prefix = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'";
    
  3. Добавьте следующий метод в класс ThisDocument.Этот метод получает содержимое файла данных XML, внедренного как ресурс в сборку, и возвращает содержимое в виде строки XML.

    Private Function GetXmlFromResource() As String
        Dim asm As System.Reflection.Assembly = _
            System.Reflection.Assembly.GetExecutingAssembly()
        Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( _
                "EmployeeControls.employees.xml")
    
        Using resourceReader As System.IO.StreamReader = _
            New System.IO.StreamReader(stream1)
            If resourceReader IsNot Nothing Then
                Return resourceReader.ReadToEnd()
            End If
        End Using
    
        Return Nothing
    End Function
    
    private string GetXmlFromResource()
    {
        System.Reflection.Assembly asm =
            System.Reflection.Assembly.GetExecutingAssembly();
        System.IO.Stream stream1 = asm.GetManifestResourceStream(
            "EmployeeControls.employees.xml");
    
        using (System.IO.StreamReader resourceReader =
                new System.IO.StreamReader(stream1))
        {
            if (resourceReader != null)
            {
                return resourceReader.ReadToEnd();
            }
        }
    
        return null;
    }
    
  4. Добавьте следующий метод в класс ThisDocument.Метод AddCustomXmlPart создает новую пользовательскую XML-часть, содержащую XML-строку, которая передается в метод.

    Чтобы убедиться, что пользовательская XML-часть создается только один раз, метод создает пользовательскую XML-часть только, если такая часть с соответствующим идентификатором GUID еще не существует в документе.При первом вызове этого метода значение свойства Id сохраняется в строке employeeXMLPartID.Значение строки employeeXMLPartID сохраняется в документе, потому что она была объявлена с помощью атрибута CachedAttribute.

    Private Sub AddCustomXmlPart(ByVal xmlData As String)
        If xmlData IsNot Nothing Then
    
            employeeXMLPart = Me.CustomXMLParts.SelectByID(employeeXMLPartID)
            If (employeeXMLPart Is Nothing) Then
                employeeXMLPart = Me.CustomXMLParts.Add(xmlData)
                employeeXMLPart.NamespaceManager.AddNamespace("ns", _
                    "https://schemas.microsoft.com/vsto/samples")
                employeeXMLPartID = employeeXMLPart.Id
            End If
        End If
    End Sub
    
    private void AddCustomXmlPart(string xmlData)
    {
        if (xmlData != null)
        {
            employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID);
            if (employeeXMLPart == null)
            {
                employeeXMLPart = this.CustomXMLParts.Add(xmlData);
                employeeXMLPart.NamespaceManager.AddNamespace("ns", 
                    @"https://schemas.microsoft.com/vsto/samples");
                employeeXMLPartID = employeeXMLPart.Id;
            }
        }
    }
    

Привязка элементов управления содержимым к элементам пользовательской XML-части

Привяжите все элементы управления содержимым к элементу в пользовательской XML-части, используя свойство XMLMapping каждого элемента управления.

Привязка элементов управления содержимым к элементам пользовательской XML-части

  • Добавьте следующий метод в класс ThisDocument.Этот метод привязывает каждый элемент управления содержимым к элементу в пользовательской XML-части и задает формат отображения даты элемента управления DatePickerContentControl.

    Private Sub BindControlsToCustomXmlPart()
        Dim xPathName As String = "ns:employees/ns:employee/ns:name"
        Me.PlainTextContentControl1.XMLMapping.SetMapping(xPathName, _
            prefix, employeeXMLPart)
    
        Dim xPathDate As String = "ns:employees/ns:employee/ns:hireDate"
        Me.DatePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy"
        Me.DatePickerContentControl1.XMLMapping.SetMapping(xPathDate, _
            prefix, employeeXMLPart)
    
        Dim xPathTitle As String = "ns:employees/ns:employee/ns:title"
        Me.DropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, _
            prefix, employeeXMLPart)
    End Sub
    
    private void BindControlsToCustomXmlPart()
    {
        string xPathName = "ns:employees/ns:employee/ns:name";
        this.plainTextContentControl1.XMLMapping.SetMapping(xPathName,
            prefix, employeeXMLPart);
    
        string xPathDate = "ns:employees/ns:employee/ns:hireDate";
        this.datePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy";
        this.datePickerContentControl1.XMLMapping.SetMapping(xPathDate,
            prefix, employeeXMLPart);
    
        string xPathTitle = "ns:employees/ns:employee/ns:title";
        this.dropDownListContentControl1.XMLMapping.SetMapping(xPathTitle,
            prefix, employeeXMLPart);
    }
    

Запуск кода при открытии документа

Создайте пользовательскую XML-часть и привяжите пользовательские элементы управления к данным при открытии документа.

Запуск кода при открытии документа

  • Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument.Этот код получает строку XML из файла employees.xml, добавляет строку XML к новой пользовательской XML-части в документе и привязывает элементы управления содержимым к элементам в пользовательской XML-части.

    Dim xmlData As String = GetXmlFromResource()
    If xmlData IsNot Nothing Then
        AddCustomXmlPart(xmlData)
        BindControlsToCustomXmlPart()
    End If
    
    string xmlData = GetXmlFromResource();
    
    if (xmlData != null)
    {
        AddCustomXmlPart(xmlData);
        BindControlsToCustomXmlPart();
    }
    

Проверка проекта

При открытии документа элементы управления содержимым отображают данные элементов пользовательской XML-части.Можно щелкнуть элемент управления DropDownListContentControl, чтобы выбрать одно из трех корректных значений элемента title, которые определены в файле employees.xsd.При редактировании данных в любом элементе управления содержимым новые значения сохраняются в пользовательской XML-части в документе.

Тестирование элементов управления содержимым

  1. Чтобы запустить проект, нажмите клавишу F5.

  2. Убедитесь, что таблица в документе соответствует описанной далее таблице.Каждая строка во втором столбце берется из элемента в пользовательской XML-части в документе.

    Имя сотрудника

    Карина Лил

    Дата приема на работу

    1 апреля 1999 г

    Заголовок

    Руководитель

  3. Щелкните ячейку справа от ячейки Имя сотрудника и введите другое имя.

  4. Щелкните ячейку справа от ячейки Должность и выберите другую дату в элементе управления выбора даты.

  5. Щелкните ячейку справа от ячейки Должность и выберите новый элемент из раскрывающегося списка.

  6. Сохраните и закройте документ.

  7. В обозревателе файлов, открыть папку под \ debug \ положение расположением проекта.

  8. Щелкните правой кнопкой мыши файл EmployeeControls.docx и выберите пункт Переименовать.

  9. Назовите файл EmployeeControls.docx.zip.

    Документ EmployeeControls.docx сохраняется в формате Open XML.Если добавить к имени документа расширение ZIP-файла, можно изучить содержимое документа.Дополнительные сведения об Open XML см. в технической статье Основные сведения о формате файлов Open XML.

  10. Дважды щелкните файл EmployeeControls.docx.zip.

  11. Дважды щелкните папку customXml.

  12. Щелкните правой кнопкой мыши item2.xml и выберите пункт Открыть.

    Этот файл содержит пользовательскую XML-часть, добавленную к документу.

  13. Убедитесь, что элементы name, hireDate и title содержат новые значения, введенные в элементах управления содержимым в документе.

  14. Закройте файл item2.xml.

Следующие действия

Дополнительные сведения об использовании элементов управления содержимым см. в следующих разделах:

См. также

Задачи

Практическое руководство. Добавление элементов управления содержимым в документы Word

Практическое руководство. Защита частей документов с помощью элементов управления содержимым

Основные понятия

Автоматизация Word с помощью расширенных объектов

Элементы управления содержимым

Общие сведения о ведущих элементах и элементах управления ведущего приложения

Программные ограничения ведущих элементов и элементов управления ведущего приложения

Добавление элементов управления в документы Office во время выполнения