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

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

Область применения. Сведения в этом разделе относятся к проектам уровня документа для Word. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

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

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

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

  • создание файла XML-данных и XML-схемы, которая определяет элементы для привязки к элементам управления содержимым;

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

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

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

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

    Примечание.

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

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

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

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

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

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

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

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

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

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

  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="http://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 и выберите команду View Code.

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

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema xmlns="http://schemas.microsoft.com/vsto/samples"
        targetNamespace="http://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-схемы к документу (Word 2013)

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

  2. На ленте выберите вкладку "Разработчик " и нажмите кнопку "Надстройки ".

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

  4. Перейдите к созданной ранее схеме employees.xsd , которая находится в каталоге проекта, а затем нажмите кнопку "Открыть ".

  5. Нажмите кнопку "ОК" в диалоговом окне "Схема Параметры".

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

Добавление схемы XML к документу (Word 2010)

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

  2. На ленте выберите вкладку "Разработчик ".

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

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

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

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

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

    Откроется область задач структуры XML.

  8. Закройте область задач структуры XML.

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

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

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

  1. В Обозреватель решений откройте контекстное меню для ThisDocument.cs или ThisDocument.vb и выберите команду View Code.

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

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

    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 void AddCustomXmlPart(string xmlData)
    {
        if (xmlData != null)
        {
            employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID);
            if (employeeXMLPart == null)
            {
                employeeXMLPart = this.CustomXMLParts.Add(xmlData);
                employeeXMLPart.NamespaceManager.AddNamespace("ns", 
                    @"http://schemas.microsoft.com/vsto/samples");
                employeeXMLPartID = employeeXMLPart.Id;
            }
        }
    }
    

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

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

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

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

    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-часть и привяжите пользовательские элементы управления к данным при открытии документа.

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

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

    string xmlData = GetXmlFromResource();
    
    if (xmlData != null)
    {
        AddCustomXmlPart(xmlData);
        BindControlsToCustomXmlPart();
    }
    

Тестирование проекта

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

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

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

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

    Столбец Значение
    Имя сотрудника Карина Лиал
    Дата найма 1 апреля 1999 г.
    Заголовок Менеджер
  3. Выберите ячейку справа от ячейки "Имя сотрудника" и введите другое имя.

  4. Выберите ячейку справа от ячейки "Дата найма" и выберите другую дату в средстве выбора дат.

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

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

  7. В проводник откройте папку \bin\Debug в расположении проекта.

  8. Откройте контекстное меню для EmployeeControls.docx и нажмите кнопку "Переименовать".

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

    Документ EmployeeControls.docx сохраняется в формате Open XML. Переименование этого документа с расширением ZIP-файла позволяет изучить содержимое документа. Дополнительные сведения о Open XML см. в технической статье о форматах Open XML в Office (2007).

  10. Откройте ZIP-файл EmployeeControls.docx.zip.

  11. Откройте папку customXml .

  12. Откройте контекстное меню для item2.xml и нажмите кнопку "Открыть".

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

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

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

Следующие шаги

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