ИНТЕРФЕЙС ПРОГРАММИРОВАНИЯ ДЛЯ КОМПЬЮТЕРНОЙ ПЛАТФОРМЫ Российский патент 2009 года по МПК G06F9/44 

Описание патента на изобретение RU2371758C2

Область техники

Данное изобретение относится к программному обеспечению и разработке этого программного обеспечения. Более конкретно, данное изобретение относится к интерфейсу программирования, который облегчает использование программной платформы прикладными программами и компьютерным оборудованием.

Краткое описание прилагаемых компакт-дисков

В дополнение к этому описанию изобретения предусмотрен набор из трех компакт-дисков, на которых хранится комплект для разработки программ (КРП) для операционной системы Microsoft® Windows® под кодовым названием "Longhorn". КРП содержит документацию для операционной системы Microsoft® Windows® под кодовым названием "Longhorn". К этому описанию изобретения прилагаются также дубликаты каждого из этих трех компакт-дисков.

Первый компакт-диск в наборе из трех компакт-дисков (КД 1 из 3) содержит папку с файлами под названием "Ihsdk", созданную 22 октября 2003 г.; он имеет размер 486 Мбайт, содержит 9692 подпапок и содержит 44292 подфайлов. Второй компакт-диск в наборе из трех компакт-дисков (КД 2 из 3) содержит папку с файлами под названием "ns", которая была создана 22 октября 2003 г.; он имеет размер 605 Мбайт, содержит 12628 подпапок и содержит 44934 подфайлов. Третий компакт-диск в наборе из трех компакт-дисков (КД 3 из 3) содержит папку с файлами под названием "ns", которая была создана 22 октября 2003 г.; он имеет размер 575 Мбайт, содержит 9881 подпапок и содержит 43630 подфайлов. Файлы на каждом из трех компакт-дисков могут выполняться на вычислительном устройстве на базе Windows® (например, IBM-PC или его эквиваленте), которое выполняет операционную систему марки Windows® (например, Windows® NT, Windows® 98, Windows® 2000, Windows® XP и т.д.). Содержимое файлов на каждом компакт-диске в этом наборе из трех компакт-дисков включено в описание посредством ссылки.

Каждый компакт-диск в наборе из трех компакт-дисков сам по себе имеет тип CD-R и удовлетворяет стандарту ISO 9660. Содержимое каждого компакт-диска в наборе из трех компакт-дисков согласуется с Американским стандартным кодом обмена информацией (ASCII).

Предшествующий уровень техники

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

Операционная система делает ресурсы доступными посредством функций, которые известны под общим названием «программного интерфейса приложения» или API. Термин API также используется в отношении одной из этих функций. Функции также часто группируются в отношении того, какой ресурс или услугу они обеспечивают разработчику приложений. Прикладная программа запрашивает ресурсы, вызывая отдельные функции API. Функции API также служат средством передачи сообщений и информации, обеспечиваемых операционной системой, обратно прикладной программе.

Помимо изменений в оборудовании, еще одним фактором развития операционной системы является желание упростить и ускорить разработку прикладных программ. Разработка прикладных программ может представлять собой весьма сложную задачу, иногда занимающую у разработчика годы для создания изощренной программы, содержащей миллионы строк кода. Для популярной операционной системы, например различных версий операционной системы Microsoft Windows®, разработчики прикладных программ каждый год пишут тысячи различных приложений, использующих операционную систему. Для поддержки столь многих разных разработчиков приложений требуется вразумительная и практичная базовая операционная система.

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

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

За последние несколько лет массовое распространение Интернет и сетевой технологии в целом привело к изменению перспективы для разработчиков компьютерного программного обеспечения. Традиционно разработчики программного обеспечения сосредотачиваются на локальных прикладных программах для стандартных настольных компьютеров или компьютеров на базе ЛС, которые подключены к ограниченному количеству других компьютеров посредством локальной сети (ЛС). Такие прикладные программы обычно называются «целлофановыми» продуктами, поскольку программное обеспечение торгуется и продается в целлофановой упаковке. Приложения используют четко определенные API для доступа к нижележащей операционной системе компьютера.

По мере развития и повсеместного распространения Интернет промышленники начали понимать значимость размещения приложений на различных сайтах в Всемирной паутине (или просто «веб»). Работая в сети, клиенты, где бы они ни находились, могут направлять запросы приложениям, хостируемых на серверах, размещенным в разных местах, и получать ответы за доли секунды. Однако эти веб-приложения обычно разрабатываются с использованием той же платформы операционной системы, которая была первоначально разработана для автономных вычислительных машин или компьютеров, объединенных в локальную сеть. К сожалению, в отдельных случаях эти приложения нельзя адекватно перевести в режим распределенных вычислений. Просто нижележащая платформа построена без возможности поддержки неограниченного количества соединенных между собой компьютеров.

Для осуществления перехода к распределенной вычислительной среде, реализуемой посредством Интернет, корпорация Майкрософт разработала сетевую программную платформу, известную как структура ".NET" (читается как «точка нет»). Microsoft®.NET - это программное обеспечение для соединения людей, информации, систем и устройств. Платформа позволяет разработчикам создавать веб-службы, выполняющиеся в Интернет. Этот динамический переход дополнен набором функций API для структуры .NET™ фирмы Майкрософт.

По мере распространения использования инфраструктуры .NET™ были определены способы повышения эффективности и/или производительности платформы. Изобретатели разработали уникальный набор функций API, позволяющих увеличить эффективность и/или производительность.

Сущность изобретения

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

Краткое описание чертежей

Аналогичные признаки на чертежах обозначаются аналогичными позициями.

Фиг.1 - схема сетевой архитектуры, в которой клиенты осуществляют доступ к веб-службам по Интернет с использованием традиционных протоколов.

Фиг.2 - блок-схема архитектуры программного обеспечения для сетевой платформы, которая содержит программный интерфейс приложения (API).

Фиг.3 - блок-схема подсистемы представления, поддерживаемой API, а также классов функций различных функций API.

Фиг.4 - блок-схема иллюстративного компьютера, который может полностью или частично выполнять архитектуру программного обеспечения.

Фиг. 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 и 16 - иллюстрации различных реализаций программного интерфейса.

Подробное описание

Это раскрытие посвящено программному интерфейсу приложения (API) для сетевой платформы, на которой разработчики могут строить веб-приложения и услуги. В частности, иллюстративные API описаны для операционных систем, которые могут использовать сетевую платформу, например, структуру .NET™, созданную корпорацией Майкрософт. Структура .NET™ - это программная платформа для веб-служб и веб-приложений, реализованная в распределенной вычислительной среды. Она представляет следующее поколение Интернет-вычислений с использованием открытых стандартов связи для связи между тесно связанными веб-службами, которые работают совместно для выполнения определенного задания.

В описанной реализации сетевая платформа использует XML (расширяемый язык разметки), открытый стандарт описания данных. XML находится в ведении Консорциума Всемирной паутины (W3C). XML используется для задания элементов данных на веб-странице и в документах бизнес для бизнеса. XML использует структуру тегов, аналогичную HTML; однако, в отличие от HTML, который задает порядок отображения элементов, XML задает содержимое этих элементов. HTML использует заранее определенные теги, а XML позволяет разработчику страницы самому задавать теги. Таким образом, можно идентифицировать практически любые элементы данных, что позволяет веб-страницам функционировать наподобие записей базы данных. Благодаря использованию XML и других открытых протоколов, например простого протокола доступа к объекту (SOAP), сетевая платформа позволяет интегрировать широкий круг услуг, которые можно приспособить к потребностям пользователя. Хотя описанные здесь варианты осуществления описаны применительно к XML и другим открытым стандартам, это не является ограничением заявленного изобретения.

Используемый здесь термин «программный интерфейс приложения», или API, включает в себя традиционные интерфейсы, которые реализуют метод или вызовы функций, а также удаленные вызовы (например, взаимоотношения с посредником, заглушкой) и вызовы SOAP/XML.

Следует понимать, что в некоторых приведенных ниже описаниях пространств имен описания некоторых классов, интерфейсов, перечислений и делегатов остаются пустыми. Более полные описания этих классов, интерфейсов, перечислений и делегатов можно найти в содержании компакт-дисков, где хранится вышеупомянутый КРП.

Иллюстративная сетевая среда

На фиг.1 показана сетевая среда 100, в которой можно реализовать сетевую платформу, например, инфраструктуру .NET™. Сетевая среда 100 содержит иллюстративные веб-службы 102(1),..., 102(N), которые предоставляют услуги, доступ к которым можно осуществлять по сети 104 (например, Интернет). Веб-службы, обозначенные общей позицией 102, представляют собой программируемые компоненты приложения, допускающие повторное использование и программно взаимодействующие по сети 104, обычно посредством веб-протоколов промышленного стандарта, например XML, SOAP, WAP (протокол беспроводных приложений), HTTP (протокол передачи гипертекста) и SMTP (простой протокол передачи почты), хотя можно использовать и другие средства взаимодействия с веб-службами по сети, например вызов удаленной процедуры (RFC) или технологию типа объектного брокера. Веб-служба может быть самоописывающей и часто задается в терминах форматов и упорядочения сообщений.

Веб-службы 102 непосредственно доступны другим услугам (что представлено линией связи 106) или прикладной программе, например веб-приложению 110 (что представлено линиями связи 112 и 114). Согласно фиг.1, каждая веб-служба 102 содержит один или несколько серверов, выполняющих программу для обработки запросов конкретных услуг. Такие службы часто поддерживают базы данных, в которых хранится информация, подлежащая передаче обратно запрашивающим. Веб-службы могут быть настроены на осуществление любой из разнообразных услуг. Примерами веб-услуг являются проверка, извещение, хранение в базе данных, обращение к стеку, определение местонахождения директорий, отображение, музыка, электронный кошелек, календарь/планировщик, телефонный справочник, новости и информация, игры, заказ билетов и пр. Веб-службы можно объединять друг с другом и с другими приложениями для построения интеллектуальных интерактивных систем.

Сетевая среда 100 содержит также иллюстративные клиентские устройства 120(1), 120(2), 120(3), 120(4),..., 120(M), которые используют веб-службы 102 (что представлено линией связи 122) и/или веб-приложение 110 (что представлено линиями связи 124, 126 и 128). Клиенты могут связываться друг с другом с использованием также стандартных протоколов, что представлено иллюстративной линией связи 130 XML между клиентами 120(3) и 120(4).

Клиентские устройства, обозначенные общей позицией 120, могут быть реализованы многими различными способами. Примеры возможных реализаций клиента включают в себя, но без ограничения, портативные компьютеры, стационарные компьютеры, планшетные ПК, телевизоры/приставки, устройства беспроводной связи, карманные персональные компьютеры, игровые приставки, принтеры, фотокопиры и другие интеллектуальные устройства.

Веб-приложение 110 - это приложение, предназначенное для работы на сетевой платформе, которое может использовать веб-службы 102, обрабатывая и обслуживая запросы от клиентов 120. Веб-приложение 110 состоит из одного или нескольких прикладных программ 130, которые действуют над программной структурой 132 и выполняются на одном или нескольких серверах 134 или других компьютерных системах. Заметим, что часть веб-приложения 110 может в действительности размещаться на одном или нескольких клиентах 120. Альтернативно, веб-приложение 110 может координироваться с другим программным обеспечением на клиентах 120, чтобы фактически выполнять их задания.

Программная инфраструктура 132 - это структура, которая поддерживает приложения и услуги, разработанные разработчиками приложения. Она допускает многоязыковую разработку и бесшовную интеграцию за счет поддержки множественных языков. Она поддерживает открытые протоколы, например SOAP, и инкапсулирует нижележащую операционную систему и услуги объектной модели. Структура обеспечивает устойчивую и защищенную среду выполнения для множественных языков программирования и предоставляет защищенные, интегрированные библиотеки классов.

Инфраструктура 132 является многозвенной архитектурой, которая содержит уровень 142 программных интерфейсов приложений (API), уровень 144 единой среды выполнения программ, написанных на различных языках (CLR), и уровень операционной системы/служб 146. Эта многоуровневая архитектура позволяет обновлять и модифицировать различные уровни, не влияя на другие части структуры. Спецификация его языка программирования (CLS) 140 позволяет разработчикам различных языков писать код, способный обращаться к функциям библиотек более низкого уровня. Спецификация 140 функционирует как контракт между разработчиками языков и разработчиками библиотек, который можно использовать для повышения возможности взаимодействия языков. В сочетании с CLS библиотеки, написанные на одном языке, могут быть непосредственно доступны модулям кода, написанным на других языках, что позволяет добиться «бесшовной» интеграции между модулями кода, написанными на одном языке, и модулями кода, написанными на другом языке. Одна иллюстративная подробная реализация CLS описана в стандарте ECMA, созданном участниками ECMA TC39/TG3. Читатель может ознакомиться с ECMA на веб-сайте www.ecma.ch.

Уровень 142 API представляет группы функций, которые приложения 130 могут вызывать для доступа к ресурсам и услугам, обеспечиваемым уровнем 146. Объявляя (открывая) функции API для сетевой платформы, разработчики приложений могут создавать веб-приложения для распределенных вычислительных систем, которые полностью используют сетевые ресурсы и другие веб-услуги, без необходимости понимать сложные межсетевые взаимодействия, обеспечивающие фактическую работу этих сетевых ресурсов и доступ к ним. Кроме того, веб-приложения можно писать на любом количестве языков программирования и транслировать в промежуточный язык, поддерживаемый единой средой 144 выполнения и являющийся составной частью спецификации 140 общего языка программирования. Таким образом, уровень API 142 может обеспечивать методы для обширного круга разнообразных приложений.

Кроме того, инфраструктура 132 может быть настроена на поддержку вызовов API, совершаемых удаленными приложениями, выполняющимися удаленно от серверов 134, на которых хостируется инфраструктура. Иллюстративные приложения 148(1) и 148(2), размещенные на клиентах 120(3) и 120(M) соответственно, могут использовать функции API, выполняя вызовы напрямую или косвенно к уровню 142 API по сети 104.

Инфраструктура может также быть реализована на клиентах. Клиент 120(3) представляет случай, когда инфраструктура 150 реализована на клиенте. Эта инфраструктура может быть идентична инфраструктуре 132, базирующейся на сервере, или изменена для целей клиента. Альтернативно, инфраструктура, базирующаяся на клиенте, может быть уплотнена в случае, когда клиент является ограниченным или специализированным функциональным устройством, например сотовым телефоном, карманным персональным компьютером или иным устройством связи/вычисления.

Инфраструктура программирования для разработчиков

На фиг.2 более подробно показана программная инфраструктура 132. Уровень 140 спецификации общего языка программирования (CLS) поддерживает приложения, написанные на разных языках 130(1), 130(2), 130(3), 130(4),..., 130(K). Такие языки программирования включают в себя Visual Basic, C++, C#, COBOL, Jscript, Peri, Eiffel, Python и т.д. Спецификация 140 общего языка программирования задает подмножество признаков или правил для признаков, которые, если им следовать, позволяют различным языкам сообщаться друг с другом. Например, некоторые языки не поддерживают данный тип (например, тип "int*"), который, напротив, может поддерживаться единой средой 144 выполнения. В этом случае спецификация 140 общего языка программирования не включает в себя этот тип. С другой стороны, типы, поддерживаемые всеми или большинством языков (например, тип "int[]"), входят в состав спецификации 140 общего языка программирования, что позволяет разработчикам библиотек свободно использовать его с уверенностью, что языки смогут обрабатывать его. Эта способность к сообщению приводит к «бесшовной» интеграции между модулями кода, написанными на одном языке, и модулями кода, написанными на другом языке. Поскольку различные языки особенно пригодны для конкретных задач, бесшовная интеграция между языками позволяет разработчикам выбирать конкретный язык для конкретного модуля кода с возможностью использовать этот модуль кода с модулями, написанными на других языках. Единая среда 144 выполнения программ допускает бесшовную многоязыковую разработку с межъязыковым наследованием и обеспечивает устойчивую и защищенную среду выполнения для множественных языков программирования. Дополнительную информацию относительно спецификации 140 общего языка программирования и единой среды 144 выполнения программ читатель может получить в совместно рассматриваемых заявках, озаглавленных «Способ и система компилирования множественных языков», подана 21.06.2000 (№ 09/598,105) и «Система и способ универсального типа данных», подана 10.07.2000 (№ 09/613,289), которые включены сюда посредством ссылки.

Инфраструктура 132 инкапсулирует операционную систему 146(1) (например, операционные системы под маркой Windows®) и услуги 146(2) объектной модели Объектной Модели Компонентов (COM) или распределенной COM. Операционная система 146(1) обеспечивает традиционные функции, например управление файлами, извещение, обработку событий, пользовательские интерфейсы (например, управление окнами, меню, диалоги и т.д.), безопасность, аутентификацию, проверку, процессы и потоки, управление памятью и т.д. Услуги 146(2) объектной модели обеспечивают взаимодействие с другими объектами для выполнения различных заданий. Вызовы, сделанные уровнем 142 API, адресованы уровню 144 единой среды выполнения программ для локального выполнения операционной системой 146(1) и/или услугами 146(2) объектной модели.

API 142 группирует функции API по множественным пространствам имен. Пространства имен, по существу, задают коллекцию классов, интерфейсов, делегатов, перечислений и структур, имеющих общее название «типы», которые обеспечивают конкретный набор соответствующих функций. Класс представляет управляемые выделяемые в области памяти данные, имеющие семантику присвоения ссылок. Делегат - это указатель на объектно-ориентированную функцию. Перечисление - это особого рода тип значения, который представляет именованные константы. Структура представляет статически выделяемые данные, имеющие семантику присвоения значений. Интерфейс задает контракт, который другие типы могут реализовать.

Используя пространства имен, разработчик может организовать набор типов в иерархическое пространство имен. Разработчик способен создавать множественные группы из набора типов, причем каждая группа содержит, по меньшей мере, один тип, который проявляет логически связанные функции. В иллюстративной реализации API 142 включает в себя три корневые пространства имен. Заметим, что, хотя на фиг.2 показаны только три корневых пространства имен, в API 142 могут быть включены дополнительные корневые пространства имен. Три корневых пространства имен, проиллюстрированных в API 142, таковы: первое пространство имен 200 для подсистемы представления (которое включает в себя пространство имен 202 для оболочки пользовательского интерфейса), второе пространство имен 204 для веб-служб и третье пространство имен 206 для файловой системы. Например, типам в пространстве имен 200 подсистемы представления можно присвоить имя "Windows", а типам в пространстве имен 206 файловой системы можно присвоить имя "Storage". Именованные группы можно организовать под единым пространством имен "global root" для API системного уровня, например, общим пространством System имен. Выбирая и используя в качестве префикса идентификатор верхнего уровня, можно легко ссылаться на типы в каждой группе по иерархическому имени, которое включает в себя выбранный идентификатор верхнего уровня, используемый в качестве префикса для имени группы, содержащей тип. Например, на типы в пространстве 206 имен файловой системы можно ссылаться с использованием иерархического имени "System.Storage". Таким образом, отдельные пространства имен 200, 204 и 206 становятся главными ответвлениями пространства имен System и могут нести обозначение, в котором отдельные пространства имен снабжены префиксом в виде указателя, например, префикса "System.".

Пространство имен 200 подсистемы представления относится к программированию и разработке содержимого. Оно обеспечивает типы, позволяющие генерировать приложения, документы, представления мультимедийной информации и другое содержимое. Например, пространство имен 200 подсистемы представления обеспечивает модель программирования, позволяющую разработчикам получать услуги операционной системы 146(1) и/или услуги 146(2) объектной модели.

Пространство имен 204 оболочки относится к функциям пользовательского интерфейса. Оно обеспечивает типы, позволяющие разработчикам встраивать функции пользовательского интерфейса в свои приложения, например такое простое приложение, как чат-приложение, которое действует между двумя равноправными устройствами в интрасети, и/или сложное приложение в качестве расширяемой веб-службы для миллионов пользователей. Преимущество описанной инфраструктуры состоит в ее высокой гибкости, которая заключается в том, что необходимо использовать только те части, которые соответствуют сложности конкретного решения. Инфраструктура обеспечивает основу для построения приложений на базе сообщений различного масштаба и сложности. Инфраструктура или структура обеспечивает API для базового обмена сообщениями, защищенного обмена сообщениями, надежного обмена сообщениями и обмена сообщениями в режиме транзакции. Согласно описанному ниже варианту осуществления, соответствующие API можно разложить в иерархию пространств имен наподобие того, как это было аккуратно наращено для выравнивания полезности, используемости, расширяемости и версионности.

Пространство имен 206 файловой системы относится к хранению информации. Оно обеспечивает типы, позволяющие сохранять и извлекать информацию.

Помимо инфраструктуры 132, предусмотрены инструменты 210 программирования, помогающие разработчику строить веб-службы и/или приложения. Одним примером инструментов 210 программирования служит Visual Studio™, многоязыковый комплект инструментов программирования, поставляемый корпорацией Майкрософт.

Корневые пространства имен API

На фиг.3 более подробно показана часть подсистемы 200 представления. Согласно одному варианту осуществления, пространства имен идентифицируются в соответствии с соглашением об иерархическом именовании, в котором строки имен сцепляются посредством точек. Например, пространство имен 200 подсистемы представления идентифицируется корневым именем "System.Windows". В пространстве имен "System.Windows" имеется еще одно пространство имен для различных средств управления, идентифицируемое как "System.Windows.Controls", которое, в свою очередь, идентифицирует еще одно пространство имен для примитивов (не показано), известное как "System.Windows.Controls.Primitives". В соответствии с этим соглашением по присвоению имен, ниже приведен общий обзор отдельных пространств имен API 142, хотя с тем же успехом можно использовать и другие соглашения по присвоению имен.

Согласно фиг.3, подсистема 200 представления включает в себя множественные пространства имен. Пространства имен, показанные на фиг.3, представляют конкретный вариант осуществления подсистемы 200 представления. Другие варианты осуществления подсистемы 200 представления могут включать в себя одно или несколько дополнительных пространств имен или могут не включать в себя одно или несколько пространств имен, показанных на фиг.3.

Подсистема 200 представления является корневым пространством имен для большинства функциональных возможностей представления API 142. Пространство имен 310 средств управления включает в себя средства управления, используемые для построения отображения информации, например, пользовательского интерфейса, и классы, которые позволяют пользователю взаимодействовать с приложением. Иллюстративные средства управления включают в себя "Button", создающее кнопку на дисплее, "RadioButton", которое генерирует на дисплее кнопку двухпозиционную переключения, "Menu", создающее меню на дисплее, "ToolBar", создающее панель инструментов на дисплее, "Image", генерирующее изображение на дисплее, и "Tree View", создающее иерархический вид информации.

Некоторые средства управления создаются путем вложения и размещения множества элементов. Средства управления имеют логическую модель, которая скрывает элементы, используемые для создания средств управления, тем самым упрощая модель программирования. Разработчик или пользователь может назначать стили и темы для средств управления (например, настраивая внешний вид и поведение кнопок пользовательского интерфейса). Некоторые средства управления имеют адресуемые компоненты, которые позволяют настраивать стиль отдельных средств управления. Кроме того, разработчики приложений и разработчики компонентов могут разбивать на подклассы и расширять средства управления. Средства управления визуализуются с использованием векторной графики, что позволяет изменять их размеры в соответствии с требованиями конкретного интерфейса или другого средства отображения. Средства управления способны использовать анимацию, например, для усиления интерактивности пользовательского интерфейса и для демонстрации действий и их последствий.

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

Пространство имен 310 средств управления содержит одну или несколько панелей, являющихся средствами управления, которые измеряют и размещают свои дочерние элементы (например, вложенные элементы). Например, панель "DockPanel" размещает дочерние элементы, прижимая каждый дочерний элемент к верхнему, левому, нижнему или правому краю дисплея, и заполняя остальное пространство другими данными. Например, конкретная панель может прижимать меню или панели инструментов к верхнему краю дисплея, строку состояния - к нижнему краю дисплея, список папок - к левому краю дисплея и заполнять остальное пространство списком сообщений.

Согласно отмеченному выше, System.Windows.Controls.Primitives - это пространство имен, содержащее множественные средства управления, которые являются компонентами, обычно используемыми разработчиками средств управления в пространстве имен System.Windows.Controls и разработчиками, создающими свои собственные средства управления. Примеры этих компонентов включают в себя "Thumb and RepeatButton". Другой компонент, "ScrollBar", создается с использованием четырех кнопок повтора (одной для "line up", одной для "line down", одной для "page up" и одной для "page down") и "Thumb" для перетаскивания текущего вида в другое место в документе. В другом примере "ScrollViewer" - это средство управления, создаваемое с использованием двух "ScrollBar" и одного "ScrollArea" для обеспечения прокручиваемой области.

Нижеследующий список содержит примеры классов, объявляемых пространством имен System.Windows.Controls. Эти классы позволяют пользователю взаимодействовать, например, с приложением посредством различных возможностей ввода и вывода, а также дополнительных возможностей отображения.

- AccessKey - AccessKey - это элемент FrameworkElement, который окружает символ, указывая, что необходимо получить декорации (оформление) ключей клавиатуры, обозначающие символ как мнемонику клавиатуры. По умолчанию декорация ключей клавиатуры является подчеркиванием.

- Audio - аудио-элемент.

- Border - рисует границу, фон или и то и другое вокруг другого элемента.

- Button - представляет стандартный компонент кнопки, который, по своей сути, реагирует на событие Click (клик).

- Canvas - (холст) задает область, в которой пользователь может явно позиционировать дочерние элементы посредством координат относительно области «холста».

- CheckBox - использует флаговую кнопку, чтобы предоставлять пользователю опцию, например истина/ложь. Флаговая кнопка позволяет пользователю выбирать из списка опций. Средства управления типа флаговой кнопки позволяют пользователю выбирать комбинацию опций.

- CheckedChangedEventArgs - этот класс CheckedChangedEventArgs содержит дополнительную информацию о событии CheckedChangedEvent.

- CheckStateChangedEventArgs - этот класс CheckStateChangedEventArgs содержит дополнительную информацию о событии CheckStateChangedEvent.

- ClickEventArgs - содержит информацию о событии Click.

- ColumnStyle - представляет изменяемый объект ColumnStyle.

- ColumnStyles - изменяемый объект IList шаблонов, который является коллекцией изменяемых элементов.

- ComboBox - комбинированный управляющий элемент.

- ComboBoxItem - средство управления, реализующее выбираемый элемент в ComboBox.

- ContactPickerDialog - позволяет пользователю выбирать один или несколько контактов.

- ContactPropertyRequest - позволяет приложению запрашивать информацию о свойстве контакта посредством ContactPickerDialog. Этот класс не может быть унаследован.

- ContactPropertyRequest Collection - представляет коллекцию объектов ContactPropertyRequest.

- ContactSelection - информация о выбранном контакте из файловой системы Microsoft® Windows® под кодовым названием "WinFS" или Microsoft Active Directory®.

- ContactSelectionCollection - представляет коллекцию объектов ContactSelection.

- ContactTextBox - средство управления редактированием, управляющее выбором контактов или свойствами контактов.

- ContactTextBoxSelectionChangedEventArgs - аргументы события ContactTextBoxSelectionChanged.

- ContactTextBoxTextChangedEventArgs - аргументы события ContactTextBoxTextChanged.

- ContactTextBoxTextResolvedEventArgs - аргументы события TextResolvedToContact.

- ContentChangedEventArgs - аргументы события ContentChangedEvent.

- ContentControl - базовый класс для всех средств управления с одним куском содержимого.

- ContentPresenter - ContentPresenter используется в стиле средства управления содержимым для обозначения места в визуальном дереве средства управления (хромовый трафарет), куда должно быть добавлено содержимое.

- ContextMenu - средство управления, задающее меню вариантов выбора вызова для пользователей.

- ContextMenuEventArgs - данные, отправляемые на ContextMenuEvent.

- Control - представляет базовый класс для всех пользовательско-интерактивных элементов. Этот класс обеспечивает базовый набор свойств для его подклассов.

- Decorator - базовый класс для элементов, которые применяют эффекты к единичному дочернему элементу или вокруг него, например Border.

- DockPanel - задает область, в которой можно разместить дочерние элементы горизонтально либо вертикально относительно друг друга.

- DragDeltaEventArgs - этот класс DragDeltaEventArgs содержит дополнительную информацию о событии DragDeltaEvent.

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

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

- Frame - область, в которую можно загрузить содержимое другого дерева разметки.

- Generator - Generator это объект, генерирующий ПИ со стороны ItemsControl, работающий под контролем GeneratorFactory.

- GeneratorFactory - GeneratorFactory отвечает за генерацию ПИ со стороны ItemsControl. Он поддерживает связь между элементами в ItemsCollection средства управления (выровненный вид) и соответствующими элементами ПИ. Контейнер элементов средства управления может запрашивать средство производства для генератора, который действительно генерирует ПИ.

- GridPanel - задает область сетки, состоящую из столбцов и строк.

- HeaderItemsControl - базовый класс для всех средств управления, которые содержат множественные элементы и имеют заголовок.

- HorizontalScrollBar - класс «горизонтальная полоса прокрутки».

- HorizontalSlider - класс «горизонтальный бегунок».

- HyperLink - класс HyperLink реализует средство управления навигацией. Средством представления, принятым по умолчанию, является «средство представления текста».

- Image - обеспечивает легкий способ включения изображения в документ или приложение.

- IncludeContactEventArgs - аргументы, передаваемые обработчикам события ContactPickerDialog.IncludeContact.

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

- ItemsChangedEventArgs - событие ItemsChanged инициируется GeneratorFactory, чтобы информировать компоновки об изменении коллекции элементов.

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

- ItemsView - ItemsView обеспечивает «выровненный» вид для ItemCollection.

- KeyboardNavigation - класс KeyboardNavigation обеспечивает методы для логического (с помощью клавиши Tab) и направленной (с помощью стрелок) навигации между выделяемыми средствами управления.

- ListBox - средство управления, реализующее список выбираемых элементов.

- ListItem - средство управления, реализующее выбираемый элемент в ListBox.

- Menu - средство управления, задающее меню выбора вызова для пользователей.

- MenuItem - дочерний элемент меню. Элементы меню можно выбирать для вызова команд. Элементы меню могут быть разделителями. Элементы меню могут быть заголовками подменю. Элементы меню можно выделять или отменять их выделение.

- PageViewer - представляет комбинированное средство управления просмотром документа, которое содержит средство управления разбиением на страницы, панель инструментов и средство управления линейкой страниц.

- PaginationCompleteEventArgs - аргументы события для PaginationCompleteEvent.

- PaginationProgressEventArgs - аргументы события для PaginationProgressEvent.

- Pane - обеспечивает способ задания свойств окна в языке разметки (например, "XAML") без запуска нового окна.

- Panel - обеспечивает базовый класс для всех элементов панели. Чтобы конкретизировать элемент панели, используют конкретный производный класс.

- RadioButton - RadioButton реализует кнопку опций, имеющую два состояния: истина и ложь.

- RadioButtonList - это средство управления служит средством управления группирования для кнопок с фиксированными состояниями и является частью, которая обрабатывает взаимную исключаемость кнопок с фиксированными состояниями. RadioButtonList наследует от Selector. RadioButtonList является, по существу, селектором с одним режимом выбора, и концепция выбора (из селектора) состоит в отключении свойства Checked («пометка») кнопки с фиксированными состояниями при группировке.

- RowStyle - изменяемые элементы с изменяемым шаблоном.

- RowStyles - объект IList с изменяемым шаблоном, который является коллекцией изменяемых элементов.

- ScrollChangeEventArgs - ScrollChangeEventArgs описывают изменение состояния прокрутки.

- ScrollViewer -

- SelectedItemsCollection - контейнер для выбранных элементов в селекторе.

- SelectionChangedEventArgs - введенные данные в обработчик события изменения выбора.

- SimpleText - SimpleText - это легковесный, многострочный, одноформатный текстовый элемент, предназначенный для использования в сценариях пользовательского интерфейса (ПИ). SimpleText объявляет несколько свойств одного и того же форматирования как текст и может часто использоваться для повышения производительности ценой некоторой потери универсальности.

- StyleSelector - StyleSelector позволяет приложению редактора обеспечивать логику выбора настраиваемого стиля. Например, с помощью класса Bug в качестве содержимого использовать конкретный стиль для жучков Pri1 и другой стиль для жучков Pri2. Приложение-редактор может подменять метод SelectStyle в производном классе селектора и присваивать экземпляр этого класса свойству StyleSelector на классе ContentPresenter.

- Text - представляет собой средство управления текстом, которое позволяет визуализовать множественные форматы текста. Text лучше всего использовать в ПИ приложения; усовершенствованные сценарии текста пользуются дополнительным набором признаков для TextPanel. В большинстве случаев, когда требуется поддержка сравнительно простого текста, Text является предпочтительным элементом ввиду его легковесного характера и диапазона признаков.

- TextBox - представляет средство управления, которое обеспечивает редактируемую область, воспринимающую ввод текста.

- TextChangedEventArgs - класс TextChangedEventArgs представляет тип RoutedEventArgs, которые относятся к событиям, инициируемым TextRange.SetText().

- TextPanel - форматирует, устанавливает размеры и рисует текст. TextPanel поддерживает множественные строки текста и множественные форматы текста.

- ToolTip - средство управления для отображения информации, когда пользователь «зависает» над средством управления.

- ToolTipEventArgs - данные, отправляемые на ToolTipEvent.

- TransformDecorator - TransformDecorator содержит дочерние элементы и применяет к ним указанное преобразование. TransformDecorator реализует логику для измерения и размещения дочернего элемента в его локальных (до преобразования) координатах, так что после преобразования дочерний элемент точно помещается в пространстве декоратора и использует максимальную площадь. Поэтому дочернему элементу не нужно знать, что к нему было применено преобразование.

- UIElementCollection - UIElementCollection является упорядоченной коллекцией элементов ПИ.

- ValueChangedEventArgs - этот класс ValueChangedEventArgs содержит дополнительную информацию о событии ValueChangedEvent.

- VerticalScrollBar - класс вертикальной полосы прокрутки.

- Video - воспроизводит потоковом видео- или аудиофайл в указанном прямоугольнике в текущей системе координат пользователя.

- VisibleChangedEventArgs - класс VisibleChangedEventArgs содержит дополнительную информацию о событии VisibleChangedEvent.

Пространство имен System.Windows.Controls также содержит различные перечисления. Нижеприведенный список содержит примеры перечислений, связанных с пространством имен System.Windows.Controls.

- CharacterCase - задает регистр символов в средстве TextBox управления при наборе текста.

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

- ClickMode - задает когда нужно активировать событие Click.

- ContactControlPropertyPosition - управляет позицией и отображением свойства контакта.

- ContactPickerDialogLayout - задает как ContactPickerDialog должен отображать выбранные свойства.

- ContactPropertyCategory - задает, какое значение обрабатывать по умолчанию в случае, когда свойство имеет множественные значения, из которых пользователь может выбирать. Например, если «работа» задана как предпочтительная категория при запрашивании свойства номера телефона от ContactPickerDialog, и пользователь выбирает контакт по рабочему и домашнему телефонному номеру, рабочий телефонный номер появляется как выбор по умолчанию.

- ContactPropertyType - задает свойство контакта, который ContactPickerDialog может спрашивать у пользователя.

- ContactType - задает, какие типы контактов отображать в ContactPickerDialog.

- Direction - GeneratorFactory и Generator используют это перечисление для задания направления, в котором генератор создает ПИ.

- Dock - задает позицию Dock дочернего элемента в DockPanel.

- GeneratorStatus - GeneratorFactory использует это перечисление, чтобы указать свой статус.

- KeyNavigationMode - тип свойства TabNavigation указывает, как контейнер будет перемещать выделение при использовании навигации по клавише Tab.

- MenuItemBehavior - задает различные поведения, которые может иметь MenuItem.

- MenuItemType - задает различные типы размещения элементов меню.

- Orientation - типы ориентации бегунка (Slider).

- PageViewerFit - выбирает текущий режим PageViewer, отраженный в сбросе режима.

- ScrollerVisibility - ScrollerVisibility задает наблюдаемость поведения линейки прокрутки.

- SelectionMode - задает поведение выбора для ListBox.

- "Position" - это иллюстративная структура, связанная с пространством имен System.Windows.Controls. Пользователь генератора описывает позиции с использованием этой структуры. Например, чтобы начать генерацию вперед от начала списка элементов, нужно задать позицию (-1, 0) и направление «вперед»; чтобы начать генерировать назад от конца списка, нужно задать позицию (-1, 0) и направление «назад»; чтобы генерировать элементы после элемента с индексом k, нужно задать позицию (k, 0) и направление «вперед».

Нижеследующий список содержит примеры делегатов, связанных с пространством имен System.Windows.Controls.

- CheckedChangedEventHandler - этот делегат используется обработчиками события CheckedChangedEvent.

- CheckStateChangedEventHandler - этот делегат используется обработчиками события CheckStateChangedEvent.

- ClickEventHandler - представляет методы, обрабатывающие событие Click.

- ContactTextBoxSelectionChangedEventHandler - делегат-обработчик события ContactTextBoxSelectionChanged.

- ContactTextBoxTextChangedEventHandler - делегат-обработчик события ContactTextBoxTextChanged.

- ContactTextBoxTextResolvedEventHandler - делегат-обработчик события TextResolvedToContact.

- ContentChangedDelegate - делегат для ContentChangedEvent.

- ContextMenuEventHandler - тип обратного вызова для обработки ContextMenuEvent.

- DragDeltaEventHandler - этот делегат используется обработчиками события DragDeltaEvent.

- IncludeContactEventHandler - обработчик для события ContactPickerDialog.IncludeContact.

- ItemsChangedEventHandler - делегат для использования обработчиками, получающими ItemsChangedEventArgs.

- OpenedEventHandler - обработчик для события ContactPickerDialog.Opened.

- PaginationCompleteDelegate - делегат для события PaginationCompleteEvent.

- PaginationProgressDelegate - делегат для PaginationProgressEvent.

- ScrollChangeEventHandler - этот делегат используется обработчиками события ScrollChangeEvent.

- SelectionChangedEventHandler - тип делегата для обработки события «изменение выделения».

- TextChangedEventHandler - делегат для использования обработчиками, получающими TextChangedEventArgs.

- ToolTipEventHandler - тип обратного вызова для обработки ToolTipEvent.

- ValueChangedEventHandler - этот делегат используется обработчиками события ValueChangedEvent.

Еще одно пространство имен, System.Windows.Controls.Atoms, - это подпространство имен пространства имен System.Windows.Controls. System.Windows.Controls.Atoms содержит соответствующие средства управления, аргументы событий и обработчики событий. Нижеследующий список содержит примеры классов, связанных с пространством имен System.Windows.Controls.Atoms.

- PageBar - представляет средство управления прокручиваемого разбивания на страницы.

- PageElement - визуализует конкретную страницу содержимого, разбитого на страницы.

- PageHoveredEventArgs - PageHoveredEventArgs обеспечивает информацию о том, где «висит» указатель мыши.

- PageScrolledEventArgs - PageScrolledEventArgs содержит информацию, относящуюся к событию PageScrolled.

- PageSelectedEventArgs - событие PageSelectedEvent инициируется при выделении нового диапазона строк/столбцов.

- PageSelector - позволяет пользователю выделять диапазон строк/столбцов страниц, подлежащих отображению.

- PageSource - идентифицирует источник содержимого, подлежащего разбиению на страницы. Он также обеспечивает свойства и методы для форматирования содержимого, разбитого на страницы.

Следующий список содержит примеры делегатов, связанных с пространством имен System.Windows.Controls.Atoms.

- PageHoveredEventHandler - этот делегат используется обработчиками события PageHoveredEvent.

- PageScrolledEventHandler - этот делегат используется обработчиками события PageScrolledEvent.

- PageSelectedEventHandler - этот делегат используется обработчиками события PageSelectedEvent.

Пространство имен System.Windows.Controls.Primitives является еще одним подпространством имен пространства имен System.Windows.Controls. Согласно отмеченному выше, подпространство примитивов содержит средства управления, предназначенные для использования в качестве примитивов другими, более сложными средствами управления. В нижеследующем списке приведены примеры классов, связанных с пространством имен System.Windows.Controls.Primitives.

- ButtonBase - при подмене производным классом задает соответствующие события и свойства и обеспечивает обработчики для соответствующих входных событий.

- Popup - средство управления, которое создает всплывающее окно, в котором находится содержимое.

- RangeBase - представляет базовый класс для элементов, имеющих конкретный диапазон. Примерами таких элементов являются линейки прокрутки и индикаторы выполнения. Этот класс задает соответствующие события и свойства и обеспечивает обработчики для событий.

- RepeatButton - средство управления RepeatButton добавляет повторение семантики, связанной с наступлением события Click.

- ScrollArea - ScrollArea - это эффективный элемент для прокрутки. Он содержит содержимое, которое он отсекает, и обеспечивает свойства, чтобы проявлять «открывать» сдвиг и экстент содержимого. Он также обеспечивает обработку ввода по умолчанию, что позволяет производить прокрутку программно или посредством клавиатуры или колесика мыши.

- ScrollBar - класс ScrollBar.

- Selector - базовый класс для средств управления, которые выделяют элементы среди своих дочерних элементов.

- Slider - класс Slider.

- Thumb - средство управления «бегунок» обеспечивает основную функцию перетаскивания для элементов управления линейками прокрутки и изменения размеров окна.

- "IEnsureVisible" - это пример интерфейса, связанного с пространством имен System.Windows.Controls.Primitives. IEnsureVisible реализуется на визуале, чтобы прокрутить/переместить дочерний визуал в поле зрения.

Нижеследующий список содержит примеры перечислений, связанных с пространством имен System.Windows.Controls.Primitives.

- ArrowButtonStates.

- CloseModeType - описывает, как должно вести себя всплывающее меню в отношении различных событий мыши.

- Part - перечисление Part используется для указания семантического использования средств управления, которые создают линейку прокрутки.

- PartStates - состояния «части» для ScrollBar.

- PlacementType - описывает, где на экране должно располагаться всплывающее меню.

- SizeBoxStates.

Пространство имен документов

Пространство 312 имен документов - это коллекция элементов семантики и форматирования, которые используются для создания документов со сложным форматированием и сложной семантикой. Согласно одному варианту осуществления, «элемент» - это класс, который в основном используется в сочетании с иерархией элементов (именуемой «деревом»). Эти элементы могут быть интерактивными (например, принимающими пользовательский ввод через клавиатуру, мышь или другое устройство ввода), могут визуализовать изображения или объекты и могут помогать в размещении других элементов. Примеры классов включают в себя элемент "Block", который реализует блок общего вида, элемент "Body", который представляет содержимое, включающее в себя «тело» таблицы, элемент "Cell", который вмещает табличные данные в таблице, элемент "Header", который представляет содержимое, включенное в заголовок таблицы, и элемент "PageBreak", который используется для разбивки содержимого на множественные страницы.

Нижеследующий список содержит иллюстративные классы, объявленные пространством имен System.Windows.Documents.

- AdaptiveMetricsContext - AdaptiveMetricsContext обеспечивает корневой элемент для документов в адаптивно-поточном формате. Когда дочерняя панель инкапсулирована в элементе AdaptiveMetricsContext, содержимое панели обрабатывается «механизмом метрики чтения» (RME). Размер дочерней панели используется для вычисления количества и размера любых столбцов, а также оптимальных размеров шрифтов и высот строки.

- Block - реализует элемент обобщенного блока, который не инициирует поведения визуализации, принятого по умолчанию.

- BlockElement - реализует базовый класс для всех элементов Block.

- Body - представляет содержимое, которое заключает в себе тело элемента Table.

- Bold - реализует элемент Bold, выведенный из Inline.

- BreakRecord - сохраняет информацию, необходимую для продолжения форматирования содержимого, разбитого на страницы, через разрывы страниц. Наследует от этого класса для обеспечения поддержки разбивки на страницы. Это абстрактный класс.

- Cell - ячейки содержат табличные данные в Table. Элементы Cell содержатся в Row.

- CellCollection - упорядоченная коллекция ячеек таблицы.

- Column - элемент Column используется для разделения содержимого GridPanel или Table.

- ColumnCollection - ColumnCollection - это упорядоченная коллекция столбцов.

- ColumnResult - представляет информацию, относящуюся к виду столбца.

- ContainerParagraphResult - обеспечивает доступ к вычисленным параметрам компоновки для объекта Paragraph, который содержит только другие объекты Paragraph.

- ContentPosition - представляет позицию содержимого в абзаце. Наследует из этого класса для описания позиции соответствующего содержимого. Это абстрактный класс.

- Document - целью класса Document является отделение содержимого документа от окружающего его «хрома» ПИ. «Отделение» означает, что можно создавать документ, не думая о его ПИ (и не предаваясь ему). Класс Document поддерживает содержимое документа, обычно TextPanel или FixedPanel и их дочерние элементы. Визуальное дерево (по умолчанию PageViewer) связано с этим элементом посредством механизма управления стилями WPP.

- DocumentPage - представляет информацию компоновки средству управления, связанному со страницей документа, подлежащего разбивке на страницы. Наследует от этого класса для реализации описания информации компоновки для этих средств управления. Это абстрактный класс.

- DocumentPageParagraphResult - обеспечивает доступ к вычисленным параметрам компоновки для объектов, зависящих от разбивки на страницы.

- FindEngine - базовый класс для алгоритмов поиска.

- FindEngineFactory - «фабрика» (средство производства) алгоритмов поиска.

- FixedPage - обеспечивает доступ к одной странице содержимого в документе с компоновкой фиксированного формата.

- Footer - представляет содержимое, которое заключает в себе нижний колонтитул элемента Table.

- Header - представляет содержимое, которое заключает в себе заголовок элемента Table.

- Heading - реализует элемент блочного уровня, который визуализует текст как заголовок.

- HyphenationDictionary - HyphenationDictionary представляет словарь для обеспечения поддержки расстановки переносов в приложениях. Он содержит внутренний словарь и ссылку на внешний словарь. Внутренний словарь имеет более высокий приоритет и применяется до обращения к внешнему словарю.

- Hyphenator - объект Hyphenator поддерживает ссылку на данные расстановки переносов в HyphenationDictionary, а также осуществляет расстановку переносов.

- Inline - реализует элемент Inline общего вида, который не инициирует поведение визуализации, принятое по умолчанию.

- InlineElement - реализует элемент Inline общего вида как базовый класс для всех элементов Inline.

- Italic - реализует элемент Italic, выведенный из Inline.

- LineBreak - представляет элемент разметки, который обеспечивает разрыв строки.

- LineResult - обеспечивает доступ к вычисленной информации строки текста.

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

- ListElementItem - реализует ListElementItem, который поддерживает такие маркеры, как буллиты или нумерация.

- Note - реализует элемент Note, аналогичный элементу «примечание» в HTML.

- PageBreak - представляет элемент разметки, используемый для разбивки содержимого на страницы.

- PageDescriptor - реализует дескриптор страницы, в котором хранится информация, необходимая для создания компоновки с разбивкой на страницы.

- Paragraph - реализует элемент блочного уровня, используемый для визуализации текста в абзаце. Поведение визуализации примерно аналогично как для элемента «абзац» в HTML.

- ParagraphResult - обеспечивает доступ к вычисленным параметрам компоновки для объекта Paragraph.

- Row - задает строку в элементе GridPanel или Table.

- RowCollection - RowCollection представляет упорядоченную коллекцию строк.

- RowGroup - задает принятые по умолчанию свойства для группы строк в Table or GridPanel.

- Section - реализует элемент «контейнер» общего вида. Поведение визуализации аналогично производному элементу в HTML.

- SmallCaps - реализует внутренний элемент SmallCaps. SmallCaps - это типографские формы, которые визуализуют малые заглавные варианты букв для выделения, например, в заглавии.

- Subscript - представляет внутренний элемент Subscript. Подстрочные символы пишутся непосредственно под, под и слева или под и справа по отношению к другим символам.

- Superscript - представляет внутренний элемент Superscript. Надстрочные символы обычно представляют собой буквы или цифры, визуализуемые непосредственно над, над и влево или над и вправо по отношению к другим символам.

- Table - Table используется для отображения сложных данных в виде таблицы с использованием языка разметки (например, "XAML").

- TextArray - базовый API для доступа к тексту и манипуляции им.

- TextChangedEventArgs - TextChangedEventArgs задает аргументы события, передаваемые при изменении TextArray.

- TextElement - TextElement обеспечивает средства TextRange для TextTree. Это неизменный, непрерывный TextRange с фиксированными конечными точками. Он обеспечивает поддержку функций Input, Focus и Eventing для ContentElement. Он также обеспечивает поддержку свойства DependencyObject.

- TextNavigator - может перечислять содержимое текста. Реализует подвижный TextPosition. Он может перемещаться посредством движения текста или размещаться в известном положении в тексте.

- TextParagraphResult - обеспечивает доступ к вычисленным параметрам компоновки текста, включая плавающие объекты и фигуры.

- TextPosition - это объект, представляющий определенную позицию в TextArray. Компактный объект, представляющий позицию в тексте, автоматически поддерживает позицию при изменении текста. Операции сравнения применимы только к позициям в одном и том же TextArray (одном и том же Context). TextPosition может быть статическим или подвижным. Свойство IsChangeable указывает вид позиции.

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

- TextRangeMovable - TextRangeMovable - это абстрактный класс для подвижных диапазонах текста. Он добавляет возможность перемещения начальных и конечных точек на основании TextUnits.

- TextTreeChangedEventArgs - TextTreeChangedEventArgs задает аргументы события, передаваемые при изменении TextArray.

- TextTreeDumper - TreeDumper - это испытательный класс деревьев, который является общедоступным ввиду вопросов упаковки.

- TextTreeNavigator - это объект, представляющий определенную неизменную позицию в TextTree. Это конкретная реализация TextPosition для использования только в TextTree.

- TextTreeRange - обеспечивает средства TextRange для TextTree. Это изменяющийся, непрерывный TextRange с подвижными конечными точками.

- TextTreeRangeContentEnumerator - перечислитель на объекте, являющийся непосредственным потомком TextTreeRange.

- TextUnit - расширяемый модуль навигации по тексту.

- TextUnits - текстовые модули, обычно используемые для TextPosition и TextRange.

- Typography - обеспечивает доступ к обширному набору топографических свойств OpenType.

- UIElementParagraphResult - ParagraphResult для абзаца, состоящего целиком из элемента ПИ. Используется для плавающих объектов, фигур и встроенных элементов ПИ блочного уровня.

- Underline - реализует элемент «подчеркивание», выведенный из InlineElement.

Нижеследующий список содержит примеры интерфейсов, связанных с пространством имен System.Windows.Documents.

- IDocumentContentHost - реализует этот интерфейс на хосте (главном компьютере) содержимого, что позволяет дочерним элементам этого хоста извещать хост об изменении содержимого.

- IDocumentFormatter - реализует этот интерфейс на элементе, чтобы обеспечить поддержку особенностей документа, например разбивку на страницы.

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

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

Нижеследующий список содержит примеры перечислений, связанных с пространством имен System.Windows.Documents.

- ElementEdge - идентифицирует край объекта, где размещается TextPosition.

- FindAdvancedOptions - опции расширенного поиска, используемые классами FindAlgorithm (инициализация поиска) и TextRangeMovable/TextSelection (выполнение упрощенного поиска).

- FindOptions - опции упрощенного поиска, используемые методами TextBox.Find.

- LogicalDirection - LogicalDirection задает логическое направление перемещения по тексту. Оно также используется для определения, куда будет перемещаться TextPosition при вставке содержимого в TextPosition.

- TextArrayRunType - идентифицирует прогон при заданном местоположении TextPosition с учетом LogicalDiretion.

- TextChangeOptions - возможные изменения текста для CanChangeText.

- TextMoveOptions - управляет перемещением TextNavigator, задавая условия для остановки навигации.

Нижеследующий список содержит примеры делегатов, связанных с пространством имен System.Windows.Documents.

- ObjectCloneDelegate - метод обратного вызова для обеспечения клона или копии DependencyObject при копировании или перемещении части TextArray.

- TextChangedEventHandler - делегат TextChangedEventHandler вызывается с TextChangedEventArgs всякий раз при добавлении содержимого в TextTree или его удалении оттуда.

Пространство имен форм

Пространство 314 имен форм - это коллекция элементов векторной графики, используемая для создания изображений и объектов. Использование элементов векторной графики позволяет легко изменять размеры элементов в соответствии с требованиями конкретного интерфейса или устройства отображения. Примеры элементов включают в себя элемент "Ellipse", который рисует эллипс, элемент "Line", который рисует прямую линию между двумя точками, элемент "Rectangle", который рисует прямоугольник, и элемент "Polygon", который рисует многоугольник в виде последовательности соединенных между собой линий, образующих замкнутую форму.

Нижеследующий список содержит примеры классов, объявленных пространством имен System.Windows.Shapes

- Ellipse - рисует эллипс.

- Glyphs - представляет форму «глиф» в языке разметки, например, "XAML". Глифы используются для представления шрифтов.

- Line - рисует прямую линию между двумя точками.

- Path - рисует последовательность соединенных между собой линий и кривых.

- Polygon - рисует многоугольник (последовательность соединенных между собой линий, образующих замкнутую форму).

- Polyline - рисует последовательность соединенных между собой прямых линий.

- Rectangle - рисует прямоугольник.

- Shape - абстрактный класс, обеспечивающий основные функции для элементов «форма», как то эллипс, многоугольник и прямоугольник.

Пространство имен данных

Пространство 316 имен данных содержит классы и интерфейсы, используемые для привязки свойств элементов к источникам данных, классам источников данных и зависящим от данных реализациям коллекций данных и видов. Эти классы и интерфейсы также используются для обработки исключений при вводе данных и позволяют создавать во время выполнения пользовательский интерфейс на основании информации в различных источниках данных. Данные можно отображать в текстовом виде или можно использовать для изменения форматирования отображения, например отображать суммы в долларах красным цветом, если они отрицательные. Примеры классов включают в себя класс "Bind", представляющий объект декларации привязки, который управляет связями между пользовательским интерфейсом с динамическими свойствами и данными источника, и класс "XmlDataSource", который служит источником данных для привязки данных к узлам содержимого XML.

Объектно-ориентированные приложения обычно представляют данные посредством классов, которые задают значение фрагмента данных, и операции, которые можно выполнять над этими данными. Термин «элемент данных» относится к одному такому объекту. Приложения могут обрабатывать отдельные элементы данных или коллекции элементов данных. Они могут использовать элементы данных тремя способами: (а) преобразовывать данные из внешних источников, например файловых систем, удаленных серверов, баз данных и т.д., в соответствующие элементы данных, размещенные в памяти, и преобразовывать измененные элементы данных обратно к виду, ожидаемому этими источниками; (b) оперировать элементами данных с использованием комбинации логики, ориентированной на данные, и логики, ориентированной на приложение; (с) представлять данные, реализованные в виде элементов данных, пользователю посредством пользовательского интерфейса. Пространство 316 имен данных обеспечивает поддержку первого и третьего из этих способов.

Первый способ, получение данных из внешних источников, поддерживается объектами «источник данных». Объект «источник данных» обычно задается как ресурс в объеме страницы или в объеме приложения и выступает в роли шлюза к данным. Источники данных реализуют интерфейс IDataSource, который задает стандартный механизм, посредством которого классы в пространстве имен данных получают доступ к данным. Конкретный объект «источник данных» реализует логику для извлечения нужных данных с использованием механизмов, соответствующих этому конкретному источнику. Согласно одному варианту осуществления, пространство имен данных содержит четыре класса источников данных:

1. XmlDataSource, для извлечения данных, представленных как XML.

2. SqlDataSource, для извлечения данных из баз данных SQL, например, Microsoft SQLServer.

3. WinFSDataSource, для извлечения данных из службы WinFS.

4. ObjectDataSource, для извлечения данных из произвольного объекта, заданного приложением.

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

Класс источников данных отвечает за извлечение данных из внешнего источника и преобразование их в один или несколько элементов данных, пригодных для использования классами привязки. Если необходима коллекция данных, приложение может использовать любой стандартный класс коллекций из структуры .Net, как то Array, ArrayList, Hashtable, и т.д., любой класс коллекций, ориентированный на данные, из пространства имен System.Data, например, Dataset, или любой класс коллекций, ориентированный на данные из пространства имен данных, например ArrayListDataCollection. Последние классы поддерживают извещения об изменениях; т.е. когда приложение изменяет коллекцию, добавляя элемент, удаляя элемент, сортируя коллекцию и т.д., коллекция направляет извещение. Классы привязки отслеживают эти извещения и автоматически обновляют пользовательский интерфейс для отражения изменения.

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

Третий способ, относящийся к данным, представление данных посредством пользовательского интерфейса, поддерживается классами «привязки» пространства имен данных. Эти классы позволяют приложению описывать соответствие (привязку) между свойством элемента данных (источником) и свойством пользовательского интерфейса (целью). Термин «привязка данных» (или просто «привязка») относится к установлению такого соответствия. Например, приложение может выбрать привязку данных свойства Text средства управления Textbox к свойству CustomerName элемента данных. Когда это сделано, средство управления автоматически отображает имя потребителя, обновляя отображение всякий раз, когда приложение изменяет элемент данных, и обновляя элемент данных всякий раз, когда пользователь набирает новое имя в средстве управления.

Этот вид соответствия описывается с использованием класса Bind и реализуется с использованием класса Binding. Любое количество свойств ПИ может совместно использовать одно и то же описание (Bind), но каждое свойство имеет свой собственный уникальный Binding, который поддерживает состояние для этого конкретного экземпляра. Описание включает в себя следующую информацию и нужном соответствии:

Путь (Path) - имя свойства элемента данных для использования в качестве источника привязки. Это может быть простое имя свойства или более сложное выражение, использующее подобъекты и индексаторы (например, когда свойство источника имеет значение сложного типа), например "ShippingAddress.Line[2]". Когда источником данных является XML, путь является выражением XPath.

Тип привязки (BindType) - указывает, является ли соответствие односторонним, двусторонним или одномоментным. При односторонней привязке изменения элемента данных приводят к обновлению свойства пользовательского интерфейса; данные перемещаются в одном направлении - от источника к цели. При двусторонней привязке данные перемещаются в обоих направлениях; в дополнение к одностороннему поведению, изменения свойства пользовательского интерфейса приводят к обновлениям свойства элемента данных. В случае одномоментной привязки свойства элемента данных используется для инициализации свойства пользовательского интерфейса, но изменения не распространяются ни в каком направлении.

Источник (Source) - описание, где получить элемент данных источника. Это можно сделать из объекта «источник данных», из некоторого другого элемента пользовательского интерфейса или из значения свойства DataContext целевого элемента.

Тип обновления (UpdateType) - при обновлении свойства источника в случае двусторонней привязки одно из: «немедленное», «при потере фокуса» или «явное». Немедленные обновления происходят сразу после изменения свойства пользовательского интерфейса. Обновления при потере фокуса откладываются, пока целевой элемент не потеряет фокус клавиатуры - это подходит для средства управления TextBox, во избежание затрат вычислительной мощности на обновление после каждого нажатия клавиши. Явные обновления происходят, когда приложение явно вызывает их.

Трансформер (Transformer) - объект, реализующий интерфейс IDataTransformer. Это позволяет приложению изменять значение элемента данных прежде, чем использовать его в пользовательском интерфейсе. Изменение может быть преобразованием простого типа (например, в случае привязки свойства Background к свойству данных BalanceOwed, приложение может преобразовать отрицательный остаток в красный фон, а положительный остаток - в зеленый), или преобразованием, зависящим от приложения, (например, в случае привязки свойства Text к свойству данных NetWorth приложение отображает "Rich", если NetWorth превышает $1M, "Bourgeois", если NetWorth лежит между $100K и $1M, и "Poor", если NetWorth меньше $100K). Трансформеры являются простыми, но мощными инструментами, которые помогают отделять представление от данных.

Все привязки, за исключением одномоментных, опираются на извещение об изменениях свойства данных, что позволяет производить соответствующие изменения в пользовательском интерфейсе. Классы привязки воспринимают интерфейс IPropertyChange (из пространства имен System.ComponentModel) как один из способов реализации необходимых извещений.

В нижеследующей таблице перечислены члены, объявляемые пространством имен System.Windows.Data.

Классы ArrayListCollectionView Инкапсулирует поддержку вида коллекции для класса коллекций ArrayListDataCollection. Это ненаследуемый класс. ArrayListDataCollection Обеспечивает встроенную реализацию коллекции данных массив-список с нижележащим интерфейсом коллекция-вид. Он также реализует ICollectionChange для обеспечения извещения о добавлении элементов, удалении элементов или обновлении всей коллекции. Bind Представляет объект «декларация привязки», используемый для управления привязками между пользовательским интерфейсом (ПИ) с динамическими свойствами и данными источника. Binding Обеспечивает доступ к одному экземпляру времени выполнения для привязки. Это ненаследуемый класс. BindingListCollectionView Класс видов коллекции, используемый для видов данных Microsoft®ActiveX®DataObjects (ADO). CollectionContainer Объекты этого класса поддерживают существующую структуру коллекции - например, ArrayListDataCollection или какой-либо другой DataSet в ItemCollection. ContextAffinityCollectionView Реализует вид коллекции, который включает в себя проверки родственности контекста. DstaContextObjectRef Поддерживает объектные ссылки на объекты, используемые в качестве контекста данных для привязки. Это ненаследуемый класс. DataSourceObjectRef Поддерживает объектные ссылки на источники данных. Это ненаследуемый класс. DataTransferEventArgs Инкапсулирует аргументы для событий переноса данных. События являются маршрутизируемыми событиями, которые обрабатываются конкретно назначенным обработчиком в зависимости от делегата DataTransferEventHandler. ElementObjectRef Представляет объектную ссылку на элемент, причем объект задан ИД (идентификатор) своего элемента. Это ненаследуемый класс. ExplicitObjectRef Представляет явную объектную ссылку на элемент. Это ненаследуемый класс. ListCollectionView Реализует вид коллекции для коллекций, базирующихся на IList. ObjectDataSource Служит источником данных для привязки данных. Привязываемые элементы данных можно задавать как общие типы, поддерживающие время выполнения. ObjectRef Абстрактный класс, используемый в качестве родительского класса для ElementObjectRef, ExplicitObjectRef и TypeObjectRef. ParameterCollection Объекты этого класса поддерживают коллекцию именованных параметров (с их соответствующими значениями) для SqlDataSource. QueryCommand Этот класс представляет единичный оператор выделения, подлежащий передаче в базу данных. RefreshCompletedEventArgs Инкапсулирует аргументы, переданные либо в событии RefrshCompleted для ObjectDataSource, либо в событии RefrshCompleted для XmlDataSource. SqlCommandList Список команд sql и имен таблиц, для заполнения которых они должны использоваться. SqlDataSource SqlDataSource получает данные от Microsoft SQL Server для использования в привязке данных. TransformerSource Допускает ссылку на ресурсы для класса трансформер, который задан как «задний код» в текущем приложении. TypeObjectRef Поддерживает объектную ссылку по типу. Это ненаследуемый класс. WinFSDataSource WinFSDataSource облегчает связывание данных, хранящихся в WinFS, с приложениями Avalon. XmlDataNamespaceManager Класс XmlDataNamespaceManager, используемый для декларирования пространств имен, подлежащих использованию в данных Xml, связывающих запросы Xpath. XmlDataSource Служит источником данных для привязки данных к узлам содержимого расширяемого языка разметки. XmlNamespace Декларирует отдельное пространство имен в источнике данных XML. Интерфейсы IContains Используется для создания классов, которые декларируют критерии фильтрации для видов коллекций. IDataSource Поддерживает создание объектов «источник данных». Объекты «источник данных» используются для общего представления данных для привязки данных. IDataTransformer Обеспечивает методы, допускающие преобразование связанных данных на стороне клиента. Перечисления BindFlags Описывает особые свойства привязки. См. руководство «Использование деклараций привязки для языка разметки «Longhorn»» (кодовое название XAML). См. BindType для перечисления, которое используется для задания типа привязки (односторонний, двусторонний и т.д.). BindStatus Состояние привязки. BindType Описывает, как изменения значений данных преобразуются в и из свойств источника и свойств цели привязки. SqlDataSourceMode Перечисление возможных режимов, которые может иметь SqlDataSource. Режим определяет, какого рода данные возвращаются, когда приложение извлекает значение из свойства данных. UpdateType Указывает, когда в привязке должны произойти обновления источника данных (преобразование данных от цели к источнику). Задание этих значений важно только в том случае, когда BindType задан как двусторонний (или остается заданным по умолчанию). Делегаты DataChangedEventHandler Представляет метод, обрабатывающий событие DataChanged, инициированное источниками данных, которые реализуют IDataSource. DataTransferEventHandler Представляет метод, обрабатывающий событие переноса данных, инициированное Binding. RefreshCompeteEventHandler Представляет метод, обрабатывающий события ObjectDataSource.RefreshCompleted и XmlDataSource.RefreshCompleted.

Пространство имен аудиовизуальной информации

Пространство 318 имен аудиовизуальной информации обеспечивает различные классы аудиовизуальной информации. Разработчики приложений, а также разработчики компонентов могут использовать эти классы для разработки различных функций представления. Примеры классов в пространстве 318 имен аудиовизуальной информации включают в себя класс "ImageEffect", который обеспечивает определенные эффекты построения изображения (например, размывка и градация серого), и класс "Brush", который обеспечивает механизм заливки области с использованием непрозрачных цветов, градиентов, изображений, видео и т.п.

Пространство 318 имен аудиовизуальной информации содержит подпространство имен System.Windows.Media.Animation, которое содержит услуги, позволяющие разработчику анимировать свойства и координировать набор анимаций с набором временных шкал. Анимация - это объект, который изменяет значение в течение некоторого периода времени. Анимационные эффекты включают в себя перемещение объекта по экрану и изменение размера, формы или цвета объекта. Для реализации различных анимационных эффектов предусмотрены многочисленные классы анимации. Эффекты можно получить, связав анимацию со значением свойства элемента. Например, чтобы создать прямоугольник, который постепенно появляется и исчезает, одну или несколько анимаций связывают со свойством непрозрачности прямоугольника.

Пространство 318 имен аудиовизуальной информации содержит также подпространство имен System.Windows.Media.TextFormatting, которое обеспечивает различные текстовые услуги. Например, текстовый механизм "TextFormatter" обеспечивает услуги для разрыва строк текста и форматирования текста, представляемого на экране. "TextFormatter" способен обрабатывать различные форматы символов текста и стили абзацев, а также обрабатывать международную компоновку текста.

В нижеследующей таблице перечислены примеры членов, объявляемых пространством имен System.Windows.Media.

Классы ArcSegment Представляет эллиптическую дугу между двумя точками. AudioData Позволяет воспроизводить аудиофайлы в соответствии с состоянием узла времени. AudioDataConverter Преобразователь аудиоданных. BezierSegment Представляет кубическую кривую Безье между двумя точками. Brush Обеспечивает общее средство для заливки области с использованием непрозрачных цветов (SolidColorBrush), градиентов (LinearGradoentBrush, RadialGradientBrush), изображений (ImageBrush), видео и т.д. BrushConverter Используется для преобразования объекта «кисть» (Brush) в или из другого типа объекта. Brushes Реализует набор заданных непрозрачных цветов. CloseSegment Представляет линию, соединяющую последнюю точку объекта PathFigure с его начальной точкой. CodecFilter Фильтр для перечисления кодеков. Перечисляются только кодеки с соответствующими свойствами. CodecInfo Информация о конкретном кодеке и фабрики для создания кодека. Она возвращается перечислителем кодека. ColorCollection ColorCollectionConverter ColorCollectionConverter - класс «преобразователь» для преобразования экземпляров других типов в или из экземпляров «коллекции цветов». ColorContext ClorConverter Используется для преобразования объекта «цвет» (color) в или из другого типа объекта. Colors Реализует набор заданных цветов. ContainerVisual Управляет набором заданных цветов. DashArrays DashArrays - класс DashArrays является статическим и содержит свойства общеизвестных стилей штриховки. DoubleCollection DoubleCollectionConverter DoubleCollectionConverter - класс «преобразователь» для преобразования экземпляров других типов в или из экземпляров «двойной коллекции». Drawing Drawing - это список примитивов двухмерного рисования. DrawingBrush DrawingBrush - эта TailBrush задает свое содержимое как Drawing. DrawingContext Контекст Drawing. DrawingVisual Визуал, который содержит графическое содержимое, подлежащее рисованию. EllipseGeometry Представляет геометрию круга или эллипса. FontFamily Семейство шрифтов. FormattedText Класс FormattedText является частью API легкого (простого) текста Avalon MIL, который предназначен для программистов, нуждающихся в добавлении некоего простого текста в визуал MIL. Geometry Абстрактный класс, обеспечивающий основные функции для всех классов геометрии, как то EllipseGeometry, RectangleGeometry и PathGeometry. Класс объектов «геометрия» можно использовать для обрезки, хит-тестирования (тестирование указания) и визуализации данных двухмерной графики. GeometryCollection Представляет коллекцию объектов «геометрия». GetPageEventArgs Класс GetPageEventArgs. GlyphRun Класс выполнения глифа. GliphTypeface Физическая гарнитура шрифта соответствует файлу шрифта на диске. GradientBrush Абстрактный класс, описывающий градиентную заливку. Классы, производные от GradientBrush, описывают различные способы интерпретации остановок градиента. GradientStop Описывает местоположение и цвет переходной точки в градиенте. GradientStopCollection Представляет коллекцию остановок градиента GradientStop. HitTestResult Эта база возвращает визуал, который указали во время выполнения тестирования указания. HwndInterop HwndInterop HwndVisual HyphenationCandidate Описывает один кандидат «расстановки переносов». ICCProfile ImageBrush Заливает область изображением. Этот класс можно использовать для задания изображений в качестве заливки или фона других объектов. ImageCodecCollection Коллекция кодеков (фактически CodecInfo) в системе. ImageCodecEnumerator Перечислитель кадров изображения. ImageCodecTransform ImageCodecTransform осуществляет управление цветами на конвейере построения изображения. ImageData Содержит изображение и соответствующие данные. ImageDataBuilder Этот объект используется для построения объекта ImageData. ImageDecoder ImageDecoder - это контейнер для кадров изображения. Каждый кадр изображения является ImageSource. В отличие от ImageSource, ImageDecoder не является неизменяемым объектом и может быть повторно инициализирован на другой поток изображения. Однако любые ImageSource (кадры), которые он возвращает, должны быть неизменяемыми. ImageDecoderBmp Встроенный декодер Microsoft Bmp (битовой карты). ImageDecoderGif Встроенный декодер Microsoft GIF. ImageDecoderIcon Встроенный декодер Microsoft Icon. ImageDecoderInternal Только для внутреннего пользования. ImageDecoderJpeg Встроенный декодер Microsoft Jpeg ImageDecoderPng Встроенный декодер Microsoft PNG. ImageDecoderTiff Встроенный декодер Microsoft Tiff. ImageEffect Класс ImageEffect - это базовый класс для всех эффектов построения изображения (размытия, градации серого и т.д.). Каждый эффект может не иметь ни одного входа, но должен иметь хотя бы один выход. Это предполагается реализациями по умолчанию. Если выведенный эффект собирается манипулировать выходом/выходами, удостоверьтесь в наличии хотя бы одного. ImageEffectBlur Эффект гауссова размытия. Это эффект с одним входом и одним выходом. Внимание: если эффект масштабирован (т.е. Input.ScaleX или Input.ScaleY не равен 1) и Expand равно «истина», то, возможно, выходные размеры окажутся больше или меньше, чем PixelWidth и PixelHight. Во избежание проблем отрегулируйте пиксельный буфер, поступающий на копирование. ImageEffectFlipRotate Этот эффект может переворачивать изображение относительно оси Х или Y и поворачивать на угол, кратный 90 градусам. ImageEffectGammaCorrect Этот эффект изменяет гамму изображения. ImageEffectGlow Осуществляет эффект свечения. Это эффект с одним входом и одним выходом. ImageEffectGrayscale Преобразует изображение к градации серого. Это эффект с одним входом и одним выходом. ImageEffectNegate Инвертирует изображение. Это эффект с одним входом и одним выходом. ImageEffectSharpen Нерезкая маска. Это эффект с одним входом и одним выходом. ImageEffectSource Реализация класса ImageEffectSource. ImageEffectSourceCollection Коллекция выходов эффектов изображения. ImageEffectTint Конструктор оттенков. Это эффект с одним входом и одним выходом. ImageEncoder ImageEncoder собирает набор кадров (ImageSource) с соответствующими пиктограммами и метаданными и сохраняет их в указанном потоке. Помимо зависящих от кадра пиктограмм и метаданных, могут иметь место пиктограмма и метаданные полного изображения (глобальные), если их поддерживает кодек. ImageEncoderBmp Встроенный кодер для файлов Bmp. ImageEncoderGif Встроенный кодер для файлов Gif. ImageEncoderInternal ImageEncoderInternal собирает набор кадров (ImageSource) с соответствующими пиктограммами и метаданными и сохраняет их в указанном потоке. Помимо зависящих от кадра пиктограмм и метаданных, могут иметь место пиктограмма и метаданные полного изображения (глобальные), если их поддерживает кодек. ImageEncoderJpeg Встроенный кодер для файлов Jpeg. ImageEncoderPng Встроенный кодер для файлов Png. ImageEncoderTiff Встроенный кодер для файлов Tiff. ImageExchangeMetaData ImageExchangeMetaData. Этот класс используется для доступа и задания метаданных для файлов изображения, имеющих метаданные стиля Exif. Метаданные хранятся в виде пар ключ/значение, причем ключи не обязательно являются уникальными. Этот класс обеспечивает общий доступ ко всем метаданным в изображении, а также объявляет свойства CLR для определенных общеизвестных свойств. ImageExchangeProperty ImageExchangeProperty - кортеж из ImageExchangeID и объекта, который является значением этого свойства. ImageMetaData ImageMetaData - Этот класс используется для доступа и задания метаданных для изображений. Этот класс также объявляет зависящие от кодека средства доступа к метаданным для этого изображения. ImagePalette Класс ImagePalette. ImageSizeOptions Опции задания размеров изображения. Результирующее изображение масштабируется на основании этих опций. ImageSource Задает методы, свойства и события для конвейера построения изображений, включая декодеры и эффекты. ImageSourceCollection Коллекция кодеков (фактически ImageSource) в системе. ImageSourceConverter ImageSourceConverter. IntegerCollection IntegerCollectionConverter IntegerCollectionConverter - класс «преобразователь» для преобразования экземпляров других типов в и из экземпляров IntegerCollection. LinearGradientBrush Задает линейный градиент, используемый для заливки области. LineGeometry Представляет геометрию линии. LineSegment Представляет линию между двумя точками. В отличие от объектов LineGeometry, LineSegment должен содержаться в PathFigure. MatrixTransform Создает произвольное аффинное матричное преобразование, используемое для манипулирования объектами или системами координат в двухмерной плоскости. MediaData MediaData. Используется для воспроизведения аудио/видеосодержания. MediaSystem Класс MediaSystem управляет уровнем носителей. NineGridBrush Заливает всю область изображением. Части изображения растягивают, чтобы подогнать к заданным границам. PathFigure Представляет подраздел геометрии, единая соединенная последовательность двухмерных геометрических сегментов. PathFigureCollection PathFigureConverter PathFigureConverter. PathGeometry Представляет сложную форму, которая может состоять из дуг, кривых, эллипсов, линий и прямоугольников. PathGeometryConverter PathGeometryConverter. PathSegment Абстрактный класс, который представляет сегмент объекта PathFigure. Классы, производные от PathSegment, например ArcSegment, BezierSegment и LineSegment, представляют конкретные типы геометрических сегментов. PathSegmentCollection Представляет список объектов PathSegment. PathSegmentConverter PathSegmentConverter. Pen Описывает, как вычерчивается форма. PixelFormats PixelFormats - коллекция поддерживаемых форматов пикселя. PointCollection PointCollectionConverter PointCollectionConverter - класс «преобразователь» для преобразования экземпляров других типов в и из экземпляров PointCollection. PointHitTestParameters Это класс для задания параметров хит-тестирования с точкой. PointHitTestResult Этот класс возвращает точку и визуал, который был указан во время выполнения тестирования указания. PolyBezierSegment PolyBezierSegment. PolyLineSegment PolyLineSegment. PolyQuadraticBezierSegment PolyQuadraticBezierSegment. PrintContext PrintContext поддерживает состояние и контекст для взаимодействия с принтером. QuadraticBezierSegment QuadraticBezierSegment. RadialGradientBrush Задает радиальный градиент, используемый для заливки объекта. Точка фокуса задает начало градиента, а окружность задет конечную точку градиента. RectangleGeometry Представляет геометрию прямоугольника. RetainedVisual RetainedVisual. RotateTransform Используется для поворота объекта относительно указанной точки в двухмерной плоскости x-y. ScaleTransform Масштабирует объект в двухмерной плоскости x-y, начиная с указанной центральной точки. Коэффициенты масштабирования заданы в направлениях х и y от этой центральной точки. SkewTransform Задает двухмерный перекос. SolidColorBrush Задает непрозрачную однородную заливку. StartSegment StartSegment. SubLineCollection Коллекция подлиний. Подлиния может быть объектом одного или нескольких типов внутреннего объекта GlyphRunLineOver. TileBrush Абстрактный класс, описывающий способ заливки области одной или несколькими элементами мозаики. Производные классы задают разные типы мозаики, которые можно использовать; например, ImageBrush позволяет заливать область изображением. Transform Абстрактный класс, используемый как родительский класс для всех типов преобразований в двухмерной плоскости, включая поворот (RotateTransform), масштабирование (ScaleTransform), перекос (SkewTransform) и параллельный перенос (TranslateTransform). Эта иерархия классов отличается от структуры Matrix как потому, что это класс, так и потому, что она поддерживает семантики анимации и перечисления. TransformCollection Используется для создания и манипулирования списком объектов Transform. TransformConverter Используется для преобразования объекта Transform в или из другого типа объекта. TranslateTransform Осуществляет параллельный перенос объекта в плоскости x-y. Typeface Typeface - это комбинация семейства, веса, стиля и растяжения. VectorCollection VectorCollectionConverter VectorCollectionConverter - класс «преобразователь» для преобразования экземпляров других типов в или из экземпляров VectorCollection. VideoData Позволяет воспроизводить видеофайлы в соответствии с состоянием узла времени. VideoDataConverter VideoDataConverter. Visual Базовый класс для всех типов «визуалов». Он обеспечивает услуги и свойства, общие для всех визуалов, включая тестирование указания, преобразование координат и вычисления ограничивающего окна. VisualCollection Упорядоченная коллекция объектов Visual. VisualManager Визуализует дерево объектов Visual в цель визуализации, обычно окно. Интерфейсы IHyphenate IHyphenate - это интерфейс для поставщика услуг расстановки переносов. IretainedRender Если этот интерфейс реализован на классе, который выведен из RetainedVisual, то RetainedVisual действует в режиме проверки, т.е. графическая подсистема будет вызывать OnRender в пассивном режиме (например, если визуал впервые появляется на экране). Заметим, что система может вызывать OnRender в любой момент. IVisual Этот интерфейс задает общие методы и услуги, доступные от объекта Visual. Перечисления BrushMappingMode BrushMappingMode - перечисление, описывающее, следует ли рассматривать определенные значения как абсолютные локальные координаты или же их следует считать кратными размеру ограничивающего окна. ChannelDescription Описывает порядок каждого канала пиксельных данных. ColorInterpolationMode ColorInterpolationMode определяет интерполяцию цветов в градиенте. CombineMode Задает метод, используемый для объединения двух геометрических областей. FillRule GradientSpreadMethod Задает, как следует рисовать градиент вне указанного вектора или пространства градиента. HitTestFilterBehavior Поведение для фильтрации визуалов в ходе тестирования указания. HyphenationAlignment Перечисление «выравнивание по горизонтали» используется для описания размещения содержимого по горизонтали в контейнере. HyphenationRule Поддерживаемые правила расстановки переносов. ImagePaletteType Заранее заданные типы палитр. MediaState Поддерживает текущее состояние носителей. PenDashCap PenDashCap - перечисление, описывающее рисование концов штриха в пунктирной линии. PenLineCap Описывает форму на конце линии или сегмента. PenLineJoin PenLineJoin - перечисление, описывающее рисование углов на линии. Rotation Применяемый поворот; поддерживаются только кратные 90 градусам. StandartColorSpace Stretch «Растяжение» - перечисление, описывающее, как нужно растянуть исходный прямоугольник, чтобы подогнать его к конечному прямоугольнику. StyleSimulations Моделирование стиля шрифта. TiffCompressOptions Опции сжатия для сохранения изображения TIFF. TileMode TileMode - перечисление, описывающее рисование концов линии. VerticalAllignment Перечисление «выравнивание по вертикали» используется для описания размещения содержимого по вертикали в контейнере. Структуры CharacterIndexer Этот класс помогает в реализации именованных индексаторов для символов. Color Представляет цвета в терминах альфа, красного, зеленого и синего каналов. GliphIndexer Этот класс помогает реализовать именованные индексаторы для метрики глифа. ImageExchangeID ImageExchangeID - этот класс является типом, который можно использовать как ключ для свойства в экземпляре ImageMetaData. Это может быть либо целое, либо строка. ImageExchangeMetaDataEnumerator ImageExchangeMetaData. Содержит интерфейс IEnumerator, а также сильно типизованные версии API. ImageFrameEnumerator Перечислитель для кадров изображения. ImageMetaDataRational Класс ImageMetaDataRational представлен как числитель со знаком и знаменатель со знаком. Эффективное значение рационального числа равно числитель/знаменатель. ImageMetaDataUnsignedRational Класс рациональных чисел представлен как числитель без знака и знаменатель без знака. Эффективное значение рационального числа равно числитель/знаменатель. ImagePaletteColor Структура ImagePaletteColor IntegerRect Прямоугольник, составленный из целочисленных значений. Обычно используется для задания нужного исходного прямоугольника (в пикселях) из изображения. Matrix Представляет матрицу 3х3, используемую для преобразований в двухмерном пространстве. Поскольку “Avalon” допускает только аффинные преобразования, структура Matrix имеет шесть элементов вместо девяти. NamedStringIndexer Этот класс помогает реализовать именованные индексаторы для строк, локализованных в множественных культурах. PixelFormat Определение формата пикселя для изображений и поверхностей на пиксельной основе. Делегаты GetPageEventHandler Делегат GetPageEventHandler. HitTestFilterDelegate Делегат для средства тестирования указания, чтобы управлять, тестировать ли потомки визуала. HitTestResultDelegate Делегат для средства тестирования указания, чтобы управлять возвращение информации указания на визуале.

В нижеследующих таблицах приведены примеры членов, объявляемых пространством имен System.Windows.Media.Animation.

Классы Animatable Любой класс, который не выводится из DependencyObject, но имеет свойства, которые можно анимировать, должен выводиться из этого класса. AnimationCollection Этот абстрактный класс обеспечивает основные функции для коллекций анимации, например ColorAnimationCollection, DoubleAnimationCollection и SizeAnimationCollection. AnimationEffect Подменяет этот класс для реализации анимаций элементного уровня, которые могут участвовать в процессе визуализации, чтобы назначать анимации на множественных элементах во время визуализации. AnimationEffectCollection Поддерживает коллекцию «эффектов анимации». BoolAnimationCollection Представляет коллекцию анимаций BoolModifier. BoolModifier BoolTimedModifier ByteAnimationCollection Представляет коллекцию анимаций ByteModifier. ByteModifier ByteTimedModifier CharAnimationCollection Представляет коллекцию анимаций CharModifier. CharModifier CharTimedModifier ColorAnimation Анимирует цветовое значение свойства. ColorAnimationCollection Представляет коллекцию анимаций ColorModifier. ColorKeyFrameCollection ColorModifier ColorTimedModifier DecimalAnimationCollection Представляет коллекцию анимаций DecimalModifier. DecimalModifier DecimalTimedModifier DoubleAnimation Используется для анимации свойств, принимающих значение Double. DoubleAnimationCollection Представляет коллекцию анимаций DoubleModifier. DoubleKeyFrameCollection DoubleModifier DoubleTimedModifier FloatAnimation Используется для анимации свойств, принимающих значение Float. FloatAnimationCollection Представляет коллекцию анимаций FloatModifier. FloatKeyFrameCollection FloatModifier FloatTimedModifier IntAnimationCollection Представляет коллекцию анимаций IntModifier. IntModifier IntTimedModifier LengthAnimation Используется для анимации свойств, принимающих значение Length. LengthAnimationCollection Представляет коллекцию анимаций LengthModifier. LengthKeyFrameCollection LengthModifier LengthTimedModifier LongAnimationCollection Представляет коллекцию анимаций
LongModifier.
LongModifier LongTimedModifier MatrixAnimationCollection Представляет коллекцию анимаций MatrixModifier. MatrixModifier MatrixTimedModifier Modifier ObjectAnimationCollection Представляет коллекцию анимаций ObjectModifier. ObjectModifier ObjectTimedModifier PathAnimation Эту анимацию можно использовать в MatrixAnimationCollection для перемещения визуального объекта вдоль пути. PointAnimation Используется для анимации свойств, принимающих значение Point. PointAnimationCollection Представляет коллекцию анимаций PointModifier. PointKeyFrameCollection PointModifier PointTimedModifier RectAnimation Используется для анимации свойств, принимающих значение Rect. RectAnimationCollection Представляет коллекцию анимаций RectModifier. RectKeyFrameCollection RectModifier RectTimedModifier ShortAnimationCollection Представляет коллекцию анимаций ShortModifier. ShortModifier ShortTimedModifier SizeAnimation Задает анимацию на основе «размера» объекта. Обеспечивая информацию «размер», объект может казаться сжимающимся или увеличивающимся в течение периода времени. SizeAnimationCollection Представляет коллекцию анимаций SizeModifier. SizeModifier SizeTimedModifier Timeline Поддерживает состояние хронирования времени выполнения для хронируемых объектов. TimelineBuilder Объект, который можно использовать для создания объектов Timeline. TimeManager Объект, управляющий всем деревом хронирования. TimeSyncValueTypeConverter Объект, осуществляющий преобразования типов с использованием значений TimeSyncValue. TimeTypeConverter Объект, осуществляющий преобразования типов с использованием значений Time. VectorAnimation Используется для анимации свойств, принимающих значение Vector. VectorAnimationCollection Представляет коллекцию анимаций VectorModifier. VectorKeyFrameCollection VectorModifier VectorTimedModifier Интерфейсы IClock Представляет объект, который может обеспечивать линейные временные значения. IModifier Задает основное поведение объекта «модификатор». Модификатор - это объект, который принимает объект, именуемый базовым значением, определенного типа и возвращает другой объект того же типа в качестве выхода. ITimingControl Задает поведение временных шкал и хронируемых объектов. ITimingControlBuffer Представляет объект, который можно строить шаблон временной шкалы. Перечисления AnimationType Описывает поведение анимации. CloneType Типы клонов, которые могут запрашивать CloneCore. InterpolationMethod Описывает, как анимация вычисляет свои выходные значения. KeyTimeType Разные типы KeyTime. TimeEndSync Значения атрибута EndSync, указывающего, как контейнер вычисляет свою простую длительность на основании длительностей потомков. TimeFill Задает поведение временной шкалы после того, как она уже не активна. TimeRestart Значения атрибута Timeline.Restart. TimeSeekOrigin Указывает позицию на временной шкале; используется для задания поведения метода Seek интерфейса ITimingControl путем задания позиции, к которой применяется смещение. TimeSyncBase Событие, с которым нужно синхронизировать начальное или конечное значение. Структуры ColorKeyFrame DoubleKeyFrame FloatKeyFrame KeySpline Этот класс используется для передачи массива ключевых сплайнов в свойство KeySplines фрагмента анимации. KeyTime KeyTime используется, чтобы задавать, когда, относительно времени анимации, имеет место этот KeyFrame. LengthKeyFrame PointKeyFrame RectKeyFrame SizeKeyFrame Time Значение, представляющее время, с соответствующими арифметическими операциями над временем. TimelineEnumerator Перечисляет элементы в коллекции TimelineList. TimeSyncValue Значение, представляющее абсолютное или относительное время начала или конца временной шкалы. VectorKeyFrame

В нижеследующей таблице приведены примеры членов, объявляемых пространством имен System.Windows.TextFormatting.

Классы InlineObjectInfo Обеспечивает детали измерения для внутренних текстовых объектов. Форматирующий клиент передает этот объект в качестве параметра методу GetInlineObjectInfo. TextFormatter TextFormatter является текстовой машиной «Avalon» и предоставляет услуги для форматирования текста и разрыва строк текста. TextFormatter может обрабатывать различные форматы символа текста и стили абзаца и включает в себя поддержку международной компоновки текста. TextHighlightBounds Границы диапазона текста. TextInfo Представляет информацию о блоке текста в хранилище символов клиентского источника текста. TextLine Обеспечивает услуги для строки текста. Наследники этого класса реализуют услуги манипулирования и форматирования строки текста. Это абстрактный класс. TextMarkerGeneratedContent Генерирует выход маркера списка строк. TextMarkerInfo Задает стиль и тип маркера списка абзаца. Форматирующий клиент использует этот класс в качестве параметра для предоставления деталей маркера методу GetTextMarkerInfo. TextParagraphProperties Представляет свойства, которые могут изменяться от абзаца к абзацу, например направление потока, выравнивание или отступ. TextRun Задает последовательность символов, которые совместно используют один набор свойств. Форматирующий клиент предоставляет детали TextRun этому классу, когда TextFormatter передает его в качестве параметра методу GetTextRun. TextRunBounds Границы прогона текста. TextRunCache Предоставляет услуги кэширования объекту TextFormatter для повышения производительности. TextRunClientData Представляет данные информации клиента, связанные с TextRun. TextRunProperties Обеспечивает свойства, которые могут изменяться от одного TextRun к другому, например гарнитуру шрифта или кисть переднего плана. Это абстрактный класс. TextRunTypographyProperties Обеспечивает типографские свойства для TextRun. Этот клиентский набор свойств генерирует набор признаков, которые обрабатываются машиной компоновки OpenType. TextSource Предоставляет данные символов и свойства форматирования на TextFormatter. Весь доступ к тексту в TextSource достигается посредством метода GetTextRun, предназначен, чтобы разрешать клиенту виртуализировать текст любым способом по выбору. Это абстрактный класс. TextTrimmingInfo Обеспечивает описание характеристик подгонки текста. Форматирующий клиент вносит детали подгонки в этот класс, когда TextFormatter передает его в качестве параметра методу GetTextTrimmingInfo. Перечисления TextParagraphFlags Флаги, описывающие характеристики абзаца. TextRunCacheFlags Род содержимого в кэше прогона текста. TextRunType Указывает тип TextRun. Структуры TextSourceCharacterIndex TextSourceCharacterIndex представляет знак вставки или позицию символа в тексте.

Уровень интеграции носителей

Уровень интеграции аудиовизуальной информации (MIL) обеспечивает API для разработчиков или программистов, чтобы они могли непосредственно создавать возможно сложные составные эффекты в своих приложениях, в то же время нагружая графический процессор так, чтобы не оказать негативного влияния на нормальную производительность приложения. Один аспект MIL предусматривает возможность объединения разных типов аудиовизуальной информации (например, двухмерной графики, трехмерной графики, видео, аудио, текста, изображений и т.п.) и их гладкой и бесшовной анимации.

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

Посредством интерфейсов MIL обеспечивает доступ к структуре данных для сохранения визуальной информации, что позволяет приложениям пользоваться графическими возможностями, обеспечиваемыми компьютерным оборудованием. Интерфейсы базируются на объектной модели элементов и языке разметки векторной графики для использования этой объектной модели элементов, что позволяет разработчикам программного кода согласованно взаимодействовать со структурой данных графа сцены для создания графики. Структуру данных также можно использовать либо для непосредственной визуализации, либо для «компиляции» визуальной информации, чтобы ее можно было предоставлять графической системе более низкого уровня для быстрой композиции и анимации.

Объектная модель элементов векторной графики в общем случае соответствует элементам формы и другим элементам, в том числе элементам изображения и видеоэлементам, которые согласуются с объектной моделью графа сцены для графа сцены. Разметку можно посредством анализа разложить по данным, включающим в себя элементы в дереве элементов, которое транслируется в объекты структуры данных графа сцены. Другая разметка может транслироваться непосредственно в данные и вызовы, которые создают объекты графа сцены. Язык разметки обеспечивает различные способы описания элемента, включая формат простой строки или синтаксис со сложными свойствами, которому можно присваивать имя, допускающие повторное использование в других местах разметки.

Аспект MIL представляет собой интеграцию анимации и хронирования по набору API, обеспечивающую анимацию как внутреннюю концепцию базового уровня. Для облегчения гладкой анимации MIL предусматривает систему и способ многоуровневой обработки графики (например, операционной системы). Такая система многоуровневой обработки графики содержит два компонента, а именно высокоуровневый компонент «отметки сигналов времени по требованию» или «медленной отметки сигнала времени» и низкоуровневый компонент «быстрой отметки сигнала времени» (например, со скоростью обновления кадра графического оборудования). В общем случае, высокоуровневый компонент более низкой частоты осуществляет вычислительно-интенсивные аспекты обновления параметров анимации и отслеживания структур данных сцены, чтобы передавать упрощенные структуры данных низкоуровневому компоненту. Низкоуровневый компонент работает на более высокой частоте, например частоте обновления кадра графической подсистемы, чтобы обрабатывать структуры данных в постоянные выходные данные для графической подсистемы. Низкоуровневая обработка включает в себя интерполяцию любых интервалов параметра, насколько это необходимо для получения мгновенных значений для визуализации сцены для каждого кадра анимации.

Объекты MIL верхнего уровня включают в себя дерево визуалов, которое является объектом, содержащим основное содержимое, подлежащее рисованию. Средства управления непосредственно выводятся из визуалов дерева. Визуалы не зависят от устройства и родительского контекста. Цель (объект) визуализации - это устройство, на котором рисуется визуал. Этот объект (например, экран) может иметь свой собственный механизм выбраковки или признания неправильным. Различные цели (объекты) визуализации включают в себя экран в окне, принтер, метафайл, поверхность и «подокно», которое является частью сцены, которая рисуется отдельно от остальной сцены. Другие объекты, относящиеся к рисованию, включают в себя «визуализатор визуалов», содержащий объект, способный рисовать дерево визуалов на цели визуализации, и объект «планировщик дисплея», который знает, когда рисовать дерево визуалов на цели визуализации. «Менеджер времени» - это контекстный объект для установки узлов хронирования и объект, помечаемый вызовами планировщика.

Предусмотрен API визуалов, который, по существу, является начальной точкой для рисования посредством уровня интеграции аудиовизуальной информации и содержит множественные типы объектов, включая объект VisualManager («менеджер визуалов»), который присоединяет дерево визуалов к носителю. Другие типы менеджеров визуалов (например, «экран», «принтер» и «поверхность») отвечают за визуализацию дерева визуалов на соответствующем носителе. Визуал - это то, где рисует программист; он является узлом в дереве визуалов и предоставляет программе место для рисования.

API DrawingContext («контекст рисования») представляют контекстно-ориентированную модель программирования, показывающую, как строить визуальное содержимое, наполняющее Visual или визуализуемое на ImageData. Предусмотрены классы DrawingContext, а также классы и точки входа, необходимые для получения DrawingContext и перечисления содержимого визуала в RetainedVisual/DrawingVisual.

Для обеспечения изменчивости предусмотрен единый набор типов, которые выводятся из общего базового класса Changeable. Любой тип, для которого изменчивость является желаемым изменением, может выводиться из класса Changeable. Например, в программировании графики, объектная модель включает в себя объекты Brush, Pen, Geometry, FloatAnimation, GradientStop, Segment и т.д. Свойство IsChangeable указывает, можно ли изменить изменяемый объект в зависимости от его текущего значения, задающего состояние.

Кисть - это объект, представляющий метод заливки плоскости. Помимо способности заливать плоскость абсолютным способом, кисти уровня интеграции аудиовизуальной информации способны также приспосабливаться, как заливать плоскость относительно размера объекта, который они заливают. Примеры типов кисти включают в себя SolidColorBrush, VisualBrush (который может ссылаться на ресурс векторной графики/визуал), DrawingBrush, LinearGradient, Radial Gradient, ImageBrush и NineGridBrush. Определенные объекты «кисть» имеют представление о том, как они соотносятся с системой координат, которую они используют, и как они соотносятся с ограничивающим окном геометрии, с которой они используются. Этот размер зависит от формы объекта, заливаемого кистью. Базовый класс Brush имеет Transform, общую непрозрачность и режим плавного перехода. Объекты Brush (и другие объектные ресурсы в векторной графике и API MIL) являются изменяемыми (Changeable) и записываемыми после своего создания после их надлежащего использования согласно общему шаблону Changeable.

Класс Geometry объектов можно использовать для обрезки, тестирования указания и визуализации двухмерных векторных данных с помощью пера (Pen) и кисти (Brush). Производные классы Geometry обеспечивают более конкретную семантику построения и перечисления. Предусмотрен ряд геометрических типов, зависящих от формы, а также обобщенный класс PathGeometry, который позволяет в явном виде определять геометрию более сложных форм. Geometry - это абстрактный базовый класс. GeometryCollection - это коллекция множественных объектов Geometry, объединенных с использованием конкретных операций CombineMode на своей заданной области. Этот объект позволяет легче строить визуальные комбинации геометрических объектов, чем это возможно с использованием исключительно объектов PathFigure в PathGeometry.

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

Класс Transform объектов предусмотрен для масштабирования, поворота, параллельного переноса и перекоса векторной и растровой графики. Производные классы Transform обеспечивают дружественное использование и семантику перечисления.

Эффекты предусматривают средства изменения визуального содержания сцены способом, ориентированным на визуализацию. Например, VisualEffects (растровые эффекты битового изображения) действуют на основанном на изображении, полностью составном представлении части сцены. Эффекты подразделяются на разные типы, включая визуальные эффекты, режимы размытия и векторные эффекты. Визуальные эффекты можно использовать в сцене режима удержания, применяя подграф или элемент, или можно использовать в самостоятельном конвейере изображения. Режимы размытия - это отдельная форма режимов на основе изображения, которую можно применять к сцене режима удержания, в принципе, таким же образом, как визуальные эффекты. Режимы размытия осуществляют объединение исходного и конечного цветов, поскольку источник является составным, например, путем умножения или сложения.

Тестирование указания используется для выбора визуалов в сцене и действует, начиная с вершины дерева управления, и возвращает средство управления или набор средств управления посредством точки или геометрии. Средство управления может определять, имеет ли место указание с помощью услуг поддержки, включая визуализуемую геометрию, ограничивающее окно, внедиапазонную геометрию (область указания), непрозрачность изображения или маску и свою собственную логику. Средство управления может возвращать конкретные данные, относящиеся к указанию, в случае указания (показания). Механизм тестирования указания может эффективно фильтровать результаты теста указания. Обход теста указания является глубоким обходом справа налево по дереву визуалов, причем отчеты об указаниях поступают посредством обратного вызова, упорядоченные по оси z, сверху вниз. Снижаясь, тестер указания просматривает фильтрацию применительно к взаимоотношениям элементного уровня, например, холстов с формами или прижатых панелей с внутренними холстами. Когда происходит указание, тестер указания может либо продолжить обработку дальнейших указаний (если таковые имеются), либо остановиться.

Предусмотрена система анимации, состоящая из механизма управления хронированием и набора объектов анимации. Механизм хронирования - это услуга, которой могут пользоваться любые объекты, поведение которых зависит от времени, например анимациями и объектами аудио- или видеоинформации. Анимационные объекты реализуют набор функций, которые отображают интервалы времени в другие типы данных, которые затем используются в качестве входов в другие объекты более высокого уровня. Графическая анимация достигается путем связывания коллекции анимации с операцией визуализации. Каждая анимация, используемая в операции визуализации, может прогоняться на отдельных сигналах синхронизации, именуемых «временной шкалой». Когда анимированный примитив нарисован, и параметры анимации заданы, низкоуровневая система визуализации берет на себя задачу визуализации сцены с регулярными интервалами. Всякий раз при визуализации кадра вычисляется текущее значение анимаций, участвующих в сцене, на основании истекшего времени (в большинстве случаев измеренное системными часами), после чего анимированные примитивы перерисовываются.

Различные типы примитивов, цветовые признаки и поддержка аудиовизуальной информации также обеспечиваются через MIL. Медиаданные могут использоваться для воспроизведения любого аудио/видеосодержимого.

Пространство имен дизайна

Пространство 320 имен дизайна обеспечивает классы, которые позволяет редактировать формы и текст, форматировать данные и совместно использовать данные в разных процессах. Эти классы обеспечивают расширяемую инфраструктуру для редактирования документов, приложений и другого содержимого. Пространство 320 имен дизайна содержит функции двух уровней: функции высокого уровня для разработчиков приложений, которым нужны предварительно упакованные готовые к использованию редакторы для различных типов информации; и функции низкого уровня для более развитых приложений, вводящих свои собственные типы данных. Иллюстративные предварительно упакованные готовые к использованию редакторы обеспечивают редактирование простого текста, редактирование обогащенного текста, редактирование форм (компоновку элементов) и ввод пароля.

Пространство 320 имен дизайна обеспечивает гибкий и расширяемый подход к организации различных функциональных возможностей. Вместо того, чтобы обеспечивать обычный редактор с фиксированными свойствами, пространство 320 имен дизайна обеспечивает комбинацию услуг, поведений и абстракций, которые позволяют разработчикам строить специализированные и легко перестраиваемые решения редактирования информации. Пространство 320 имен дизайна включают в себя несколько настраиваемых свойств редактирования, включая: услуги ограничения, многоуровневое поведение, шаблон редактора-дизайнера, абстрактный дизайнер для редактирования элементов, модель абстрактных текстовых объектов, уровень (средства) украшения, поверхность дизайна, обобщенный протокол передачи данных и расширяемый механизм отката.

Услуги с ограничением области действия позволяют связывать конкретные услуги с конкретными фрагментами и подфрагментами данных приложения. Этот механизм также позволяет подключать или отключать услуги в различных областях действия. Главным классом, обеспечивающим поддержку услуг, является ServiceManager (менеджер услуг); отдельные услуги реализуются с использованием интерфейсов IService и IScopedService.

Концепция «многоуровневого поведения» предусматривает активацию разных поведений в соответствующие периоды времени. Один вариант осуществления предусматривает, что основанная на времени активация поведения является вложенной, что позволяет начинать и заканчивать подпроцесс, временно приостанавливая более общий процесс с последующим его возобновлением. В отличие от решения жесткого программирования подход многоуровневого поведения решает эту проблему, допуская интеграцию процессов, которые не имеют заранее определенной информации друг о друге. Главным классом, обеспечивающим этот механизм, является EditRouter; отдельные поведения являются подклассами классов Editor и EditBehavior classes. Встроенные типы редактируемых данных поддерживаются соответствующими подклассами EditBehavior, например, TextEditor, ElementEditor и MoveBehavior.

Концепция «шаблон редактора-дизайнера» предусматривает разделение между общими функциональными возможностями и более конкретными подтипами редактирования редактируемой информации. Редактор не ожидает конкретную структуру данных, над которой он работает. Вместо этого он предполагает, что содержимое данных объявляется посредством некоего абстрактного интерфейса, скрывающего подробности реализации, но достаточного для соответствующего действия взаимодействия редактирования. Этот шаблон, в частности, полезен с элементами (при редактировании форм) и для текста (при редактировании обогащенного текста).

«Абстрактный дизайнер для редактирования элементов» - это приложение «шаблона редактора-дизайнера» для области редактирования элементов (например, редактирования форм). Различные элементы могут иметь разные внутренние структуры, внешние виды и поведения, но если они объявляют одних и тех же стандартных «дизайнеров» для перемещения, вращения или изменения размера, то они становятся редактируемыми посредством редактора элементов.

Абстрактная текстовая модель - это еще одно приложение «шаблона редактора-дизайнера» для использования в редактировании обогащенного текста. Эта абстракция позволяет разным резервирующим хранилищам участвовать в редактировании обогащенного текста, например RTF, XHTML, простого текста, разметки XAML, синтаксически выделенного исходного кода и т.д. Хотя семантический характер и внутренняя структура этих типов текста могут отличаться, благодаря тому что они объявляют себя через абстрактную текстовую модель, возможно применение общих механизмов редактирования. Кроме того, этот подход допускает интеграцию текста и данных, благодаря чему текст из разных резервирующих хранилищ может содержать части друг друга, в то же время обеспечивая режим бесшовного редактирования.

Уровень средства украшения - это универсальный инструмент, обеспечивающий богатую визуальную обратную связь в ходе редактирования. Уровень средства украшения обеспечивает унифицированную поддержку для многих типов обратной связи. Мощные визуалы можно динамически присоединять и отсоединять к элементам и другим фрагментам данных, чтобы указывать потенциальному пользователю применимую к ним деятельность. Поверхность дизайна - это средство управления XAML, которое предварительно упаковывает ресурсы редактирования, например, уровень средства украшения и маршрутизатор редактирования. Это упрощает разработку редактирования среднего уровня.

Функции редактирования, например, вырезать/копировать/вставить и перетащить/бросить важны в интегрированной информационной среде, но могут быть трудны для поддержки в силу сложности и несовместимости разных типов данных. Обобщенный протокол передачи данных решает это затруднение путем обеспечения комбинации абстракций, используемых для извлечения данных, вставки данных, перетаскивания данных и преобразования данных. Этот обобщенный протокол передачи данных обеспечивает мощный и гибкий механизм интеграции приложения-данных.

Расширяемый механизм отката управляет стеком отката, собирая данные различных типов. Менеджер отката включает в себя протоколы для выполнения операций отката с разными типами данных.

В нижеследующей таблице приведены примеры членов, объявляемых пространством имен System.Windows.Design.

Классы ActivationEventFilter Фильтр событий. ActivationRectangleAdornerInfo Это обратная связь, которая показывает границу на элементах DesigneActive. AdornerInfo Обеспечивает информацию о конкретном средстве украшения в наборе средств украшения. AdornerLayer Обеспечивает поверхность для отображения украшений на элементах, которым нужно преодолеть упорядочение по оси Z (элементам всегда нужно быть сверху). CanvasDesigner Дизайнер холстов по умолчанию. ComponentChangeService Обеспечивает функции отката и повторного выполнения для действий конструкции-времени, влияющих на компоненты. Designer Обеспечивает средство редактирования существующего содержимого. DesignerFilterService Задает необязательную услугу, которую приложения и средства управления могут реализовывать для подмены отображения по умолчанию между элементом и дизайнером, обеспеченным DesignerLookupService. DesignerLookupService Позволяет редактировать поведения, чтобы отображать элементы в дизайнеры. DesigneSurface Рекомендованный корневой элемент для редактируемого содержимого. Он объединяет средства украшения, услуги и события. EditBehavior Задает реализацию для всех поведений редактирования. Editor Обрабатывает пользовательский ввод для конкретного типа выделения, например текста, элемента или таблицы. Обычно для каждого типа выделения имеется отдельный редактор. EditorTypeAttribute Связывает тип выделения с режимом выделения. Это ненаследуемый класс. EditRouter Управляет набором активных в данный момент EditBehavior. EditRouterCangedEventArgs Аргументы для события Changed. ElementEditor Редактор элементов. EventFilter Допускает фильтрацию и назначение событий. FrameworkElementDesigner Дизайнер по умолчанию для всех средств управления, выведенных из FrameworkElement. MoveBehavior Поведение перемещения. ObjectSelection Выделение места. ParentUndoUnit ParentUndoUnit. RichTextDesigner Реализация ITextDesigner для TextPanel и других средств управления, которые поддерживают ITextDocumentResult. RoutedEventAdapter RoutedEventAdapter преобразует конкретный EventHandler в RoutedEventHandler, что позволяет одному обработчику обрабатывать разные типы событий. Используется EditRouter. SelectionRouter SelectionRouter управляет смешанным выделением с множественными режимами выделения. Он выводится из EditRouter для маршрутизации событий на модульные редакторы (которые выводятся из Editor). SelectionSevice Обеспечивает программный доступ для выделения элементов ПИ. Можно получать обратную связь по выделенным элементам, а также изменять выбранные элементы и их свойства. ServiceConverter ServiceConverter - класс «преобразователь» для преобразования между строкой и экземпляром Iservice. SimpleTextDesigner Реализация ITextDesigner для Text и других средств управления, поддерживающих ItextParagraphResult. TextDecorator TextDecorator задает объект, который управляет декорацией текста из конкурирующих услуг. Использование TextDecorator вместо записи значений свойства частным образом гарантирует, что конкурирующие декорации никогда не будут перекрываться, даже в случае одинакового приоритета. TextEditor Обеспечивает услуги выделения текста. TextSelection Класс TextSelection инкапсулирует состояние выделения для класса TextEditor. Он не имеет публичного конструктора, но объявляется посредством публичного свойства на TextEditor. UndoService Структурная реализация IundoService. UndoStackCahangedEventArgs Обеспечивает данные для событий UndoStackChanged и RedoStackChanged. Интерфейсы IAddRemoveChildDesigner Интерфейс IAddRemoveChildDesigner используется для добавления/удаления потомков. IAdornerDesigner Обеспечивает доступ к методам, которые позволяют извлекать объекты, необходимые для рисования средств украшения на структурных элементах. IDesigneActivationContainer Внутренний элемент в DesignActivation, который может стать DesignActive. Имеет контейнер имен, поскольку предполагается, что, если элемент является DesignActive, то он, скорее всего, редактирует какое-либо дочернее содержимое. IDesigneActivationContainerParent IdesigneActivationContainer-Parеnt может быть хозяином IDesigneActivationContainer-ов в среде Designe. IDesignSurface Интерфейс, подлежащий реализации любым элементом, желающим участвовать в редактировании. IMoveDesigner Интерфейс дизайнера перемещения. IParentUndoUnit Интерфейс IparentUndoUnit. IScopedService IscopedService. ISelection Базовый интерфейс для режимов выделения. ISelectionDesigner Интерфейс дизайнера, связанный с SelectionBehavior (SelectionRouter). Реализующий его класс задан в атрибуте «дизайнер» типа элемента. IService Это заполнитель для TypeConverter для услуг редактирования. ITextDesigner Компоненты интерфейса реализуются для обеспечения услуги TextEditor информацией и действиями, зависящими от компоновки. IUndoService Интерфейс IUndoService. IUndoUnit Интерфейс IUndoUnit. Перечисления AdornerInfoZOrder Флаги упорядочения по Z. AdornerRenerTriggers Флаги, указывающие условия визуализации украшателей. EditRouterChange Перечисление возможных действия изменения маршрутизатора. TextDecorationPriority TextDecorationPriority ранжирует относительную важность различных разметок текста. Он используется для упорядочения по Z прогонов декорации в классе TextDecorator. UndoState Перечисления для состояния менеджера отката. Делегаты UndoStackChangedEventHandler Представляет метод, обрабатывающий событие UndoStackChanged или RedoStackChanged.

Пространство имен ввода

Пространство 322 имен ввода включает в себя менеджер ввода, который координирует вводимые данные, принимаемые системой. Пространство 322 имен ввода также включает в себя классы, которые помогают управлять и обеспечивать управление для различных устройств ввода, например клавиатуры или мыши. Система ввода позволяет приложениям получать информацию от устройств ввода, например мышей, клавиатур и стилусов (перьев). Функциональные средства, в большинстве своем, представляют собой свойства, методы и события на классах UIElement, FrameworkElement, ContentElement, и ContentFrameworkElement в пространстве имен System.Windows. UIElement и ContentElement имеют сходные функциональные возможности ввода, которые перехватываются интерфейсом IInputElement. Аналогично, FrameworkElement и ContentFrameworkElement, которые являются производными от UIElement и ContentElement соответственно, совместно используют многочисленные API ввода и обе реализуют IFrameworkInputElement.

Система ввода обеспечивает полную поддержку клавиатур, мыши и стилусов. Функциональные возможности клавиатуры включают в себя события нажатия/отпускания клавиши, управление фокусом и извещение о нем, доступ к текущему состоянию клавиши и преобразование ударов по клавишам во входные строки. Функциональные возможности мыши включают в себя позицию мыши, клики (нажатие клавиши мыши), перемещение, события вхождения/ухода на границах элементов, перехват сообщений от мыши, зависание и колесико мыши. Функциональные возможности стилуса включают в себя позицию и перемещение (как в случае, когда перо касается поверхности, так и в случае, когда оно «висит в воздухе»), удары/клики, захват и распознавание жестов.

Пространство имен ввода содержит классы-помощники, необходимые для вышеуказанных функций, например, перечисления, аргументы событий, структуры-делегаты и т.д. Кроме того, пространство имен ввода содержит классы Keyboard, Mouse и Stylus, которые предоставляют информацию, относящуюся к текущему состоянию этих устройств. Система ввода обеспечивает способы задания курсоров мыши на конкретном элементе и для всего приложения.

Система ввода интегрирована с инфраструктурой текстовых услуг (TSF), которая позволяет другому программному обеспечению ввода понимать текстуальный контекст, в который вводится новый текст. Для этого используются редакторы метода ввода (IME), которые позволяют пользователям восточно-азиатских языков превращать множественные удары по клавишам в единый символ - программное обеспечение IME сообщается с TSF, чтобы идентифицировать наилучшую интерпретацию ударов по клавишам на основании контекста, и используют TSF для вставки текста в документ. Аналогично, распознавание речи использует TSF для выборки наилучшего распознавания и вставки его в документ.

Система ввода обеспечивает автоматическую интеграцию с TSF в форме события TextInput. Пространство имен ввода также обеспечивает API для описания текстуального контекста и управления преобразованием из необработанного ввода клавиатуры в текстуальной ввод. Класс InputManager обеспечивает фильтры и мониторы, которые позволяют третьей стороне наблюдать входной поток и создавать новые события ввода до того, как будут инициированы новые события ввода. InputManager также обеспечивает API для новых устройств, подключаемых к системе ввода, с использованием IInputProvider и InputReport.

В нижеприведенной таблице перечислены иллюстративные члены, объявляемые пространством имен System.Windows.Input.

Классы AccessKeyManager AccessKeyManager объявляет функции ключей доступа, также известные как мнемоники. Типичным примером является кнопка Ok, с мнемоникой alt-O - нажатие alt-O равносильно нажатию кнопки. Cursor Представляет курсор мыши для использования. CursorTypeConverter Преобразует курсоры мыши в и из строк. FocusChangedEventArgs Класс FocusChangedEventArgs содержит информацию об изменениях фокуса. InputDevice Обеспечивает базовый класс для всех устройств ввода. InputEventArgs Класс InputEventArgs представляет тип RoutedEventArgs, которые относятся ко всем событиям ввода. InputLanguageChangedEventArgs Класс InputLanguageEventArgs представляет тип RoutedEventArgs, которые относятся к событиям, инициируемым для указания изменения в (человеческом) языке ввода. InputLanguageChangingEventArgs Класс InputLanguageEventArgs представляет тип RoutedEventArgs, которые относятся к событиям, инициируемым для указания изменения в (человеческом) языке ввода. InputLanguageEventArgs Класс InputLanguageEventArgs представляет тип RoutedEventArgs, которые относятся к событиям, инициируемым для указания изменения в (человеческом) языке ввода. InputLanguageManager Класс InputLanguageManager отвечает за поддержание языка ввода в Avalon. InputManager Класс InputManager отвечает за координацию всей системы ввода в Avalon. InputMethod Класс InputMethod объявляет API, связанные с TSF, которые сообщаются со свойствами TIP или обращаются к ним. InputMethodStateChangedEventArgs Этот класс InputMethodStateChangedEventArgs используется, когда редактор метода ввода (IME) изменяет свое состояние. InputProviderSite Объект, который используют поставщики ввода, чтобы сообщать о вводе менеджеру ввода. InputReport InputReport - это абстрактный базовый класс для всего ввода, о котором сообщается менеджеру ввода. InputReportEventArgs Обеспечивает данные для события, которое инициируется при обработке InputReport. Keyboard Класс Keyboard объявляет API, относящиеся к клавиатуре. KeyboardDevice Класс KeyboardDevice представляет устройство клавиатуры членам контекста. KeyboardEventArgs Класс KeyboardEventArgs обеспечивает доступ к логическому указательному устройству для всех аргументов производного события. KeyEventArgs Класс KeyEventArgs содержит информацию о состояниях клавиш. KeyInterop Обеспечивает статические методы для преобразования между VirtualKeys Win32 и перечислением Key “Avalon”. Mouse Класс Mouse объявляет API, относящиеся к мыши. MouseButtonEventArgs MouseButtonEventArgs описывает состояние кнопки мыши. MouseDevice Класс MouseDevice представляет устройство мыши членам контекста. MouseDoubleClickEventArgs Обеспечивает данные для событий, инициируемых при двойном щелчке мыши. MouseEventArgs Класс MouseEventArgs обеспечивает доступ к логическому устройству мыши для всех аргументов производного события. MouseWeelEventArgs MouseWeelEventArgs описывает состояние колесика мыши. NotifyInputEventArgs Обеспечивает информацию о событии ввода, обрабатываемом менеджером ввода. PreProcessInputEventArgs Позволяет обработчику отменять обработку события ввода. ProcessInputEventArgs Обеспечивает доступ к постановочной области менеджера ввода. RawKeyboardInputReport Класс RawKeyboardInputReport инкапсулирует необработанный ввод, поступающий от клавиатуры. RawMouseInputReport Класс RawKeyboardInputReport инкапсулирует необработанный ввод, поступающий от мыши. StagingAreaInputItem Этот класс инкапсулирует событие ввода в то время, как оно обрабатывается менеджером ввода. TextInputEventArgs Класс TextInputEventArgs содержит текстовое представление ввода. TextManager Класс TextManager обеспечивает продвижение события от ввода до текста. TextServicesContext Этот класс управляет взаимодействием между UIDispatcher и структурой сетевых услуг, собственным API COM, обеспечивающим ввод восточно-азиатского IME. TextStoreInfo Это внутренний, защищенный класс с требованием ссылки. Интерфейсы IInputLanguageSource Интерфейс для управления источника языка ввода. IInputProvider Интерфейс, реализованный всеми поставщиками ввода. IKeyboardInputProvider Интерфейс для управления поставщика ввода через клавиатуру. IMouseInputProvider Интерфейс для управления поставщика ввода через мышь. Перечисления CursorType Перечисление поддерживаемых типов курсора. ImeConversionMode ImeConversionMode. ImeSentenceMode ImeSentenceMode. InputMethodState Состояние IME. InputMode Режим обработки ввода, когда обеспечивается ввод. InputType Тип ввода, о котором сообщается. Key Перечисление всех возможных значений клавиш на клавиатуре. KeyState Перечисление KeyState описывает состояние, в котором могут находится клавиши клавиатуры. ModifierKeys Перечисление ModifierKeys описывает набор общих клавиш, используемых для изменения других операций ввода. MouseButton Перечисление MouseButton описывает кнопки, имеющиеся на устройстве мыши. MouseButtonState Перечисление MouseButtonState описывает возможные состояния кнопок, имеющихся на устройстве мыши. RawKeyboardActions Необработанные действия, о которых поступают извещения от клавиатуры. RawMouseActions Необработанные действия, о которых поступают извещения от мыши. SpeechMode Режим речи. Структуры TextServicesMSG Управляемая версия структуры MSG Win32. Делегаты FocusChangedEventHandler Делегат для использования для обработчиков, которые получают FocusChangedEventArgs. InputEventHandler Делегат для использования для обработчиков, которые получают InputEventArgs. InputLanguageEventHandler Это делегат для событий InputLanguageChanged и InputLanguageChanging. InputMethodStateChangedEvent-Handler Делегат для использования для обработчиков, которые получают событие InputMethodStateChangedEvent. InputReportEventHandler Делегат для использования для обработчиков, которые получают PointerMoveEventArgs. KeyboardEventHandler Делегат для использования для обработчиков, которые получают KeyboardEventArgs. KeyEventHandler Делегат для использования для обработчиков, которые получают KeyEventArgs. MouseButtonEventHandler Делегат для использования для обработчиков, которые получают MouseButtonEventArgs. MouseDoubleclickEventHandler Делегат для использования для обработчиков, которые получают MouseDoubleclickEventArgs. MouseEventHandler Делегат для использования для обработчиков, которые получают MouseEventArgs. MouseWeelEventHandler Делегат для использования для обработчиков, которые получают MouseWeelEventArgs. NotifyInputEventHandler Тип делегата для обработчиков событий, которые получают NotifyInputEventArgs. PreProcessInputEventHandler Тип делегата для обработчиков событий, которые получают PreProcessInputEventArgs. ProcessInputEventHandler Тип делегата для обработчиков событий, которые получают ProcessInputEventArgs. TextInputEventHandler Делегат для использования для обработчиков, которые получают TextInputEventArgs.

Пространство имен навигации

Пространство 324 имен навигации обеспечивают набор классов и услуг, которые позволяют строить приложения с парадигмами навигации, например приложение обозревателя. Эти классы и услуги позволяют разрабатывать приложения с настраиваемыми свойствами навигации. Например, при приобретении продукта или услуги у онлайнового продавца, кликнув кнопку «назад», можно заставить приложение отобразить другую страницу, которая спрашивает пользователя, хочет ли он отменить или изменить свой заказ. В другом примере активация кнопки «обновление» заставляет приложение извлечь новые данные вместо того, чтобы сначала перезагрузить приложение, а затем извлечь новые данные. Пространство 324 имен навигации также содержит функции страницы, которые обеспечивают механизм генерации иерархии вопросов, задаваемых пользователю.

В нижеследующих таблицах приведены примеры членов, объявляемых пространством имен System.Windows.Navigation.

Классы BoolWrapper Упаковщик для булева значения. BoolWrapperPageFunction Типизированная функция страницы, которая возвращает булево значение предыдущей странице. BoolWrapperReturnEventArgs IntWrapper Упаковщик для значения Int32. IntWrapperPageFunction Типизированная функция страницы, которая возвращает значение Int32 предыдущей странице. IntWrapperReturnEventArgs Journal Содержит историю навигации приложения. JournalEntry Представляет запись журнала. LoaderService Используется для задания текущего загрузчика в данном домене приложения. NavigateEventArgs Устарел. NavigatingCancelEventArgs Аргументы события для событий Navigation.Application.Navigating и Navigation.Window.Navigating. NavigatingNewWindowCancel-EventArgs NavigatingNewWindowCancelEventArgs задает целевой NavigationContainer, где будет иметь место навигация, при передаче ему URI или элемента. По умолчанию свойство Cancel задается равным «ложь». Задание Cancel равным «истина» препятствует открытию нового окна, и навигация не будет осуществляться. NavigationApplication Представляет системе приложение навигации “Longhorn”. NavigationContainer Область навигации, которая может содержать дерево разметки “Avalon”. Обычно этот класс не используется непосредственно, но его можно использовать как родительский класс для специализированной реализации. NavigationErrorCancelEventArgs Содержит аргументы для событий NavigationApplication.NavigationError и NavigationWindow.NavigationError. NavigationEventArgs Аргументы события для неотменимых событий навигации, включая LoadCompleted, LoadStarted, Navigated и NavigationStopped. NavigationProgressEventArgs Содержит аргументы для событий NavigationApplication.Navigation-Process и NavigationWindow.NavigationProcess. NavigationService Содержит делегаты, используемые событиями навигации, и динамическое свойство, содержащее интерфейс INavigator. NavigationWindow Представляет окно навигации. ObjectPageFunction Типизированная функция страницы, которая возвращает значение Object предыдущей странице. ObjectReturnEventArgs PageFunction Этот класс непосредственно не поддерживается. Вместо него используется один из типизированных классов: BoolWrapperPageFunction, IntWrapperPageFunction, ObjectPageFunction или StringPageFuction. ReturnArgs Объект «аргумент события» для события Return. Этот класс непосредственно не поддерживается. Вместо него используются аргументы для соответствующих типизированных классов: BoolWrapperPageFunction, IntWrapperPageFunction, ObjectPageFunction или StringPageFuction. StringPageFuction Типизированная функция страницы, которая возвращает значение String предыдущей странице. StringReturnEventArgs WindowNavigationContainer Представляет область навигации в окне навигации. Интерфейсы IJournalData Интерфейс IJournalData - должен быть реализован средствами управления, которым нужно сохранить состояние в журнале и восстановить его при повторном посещении страницы. ILoader Интерфейс, используемый для разрешения URI по потокам. Его можно использовать для загрузки содержимого из файла, http, контейнера и управляемых и неуправляемых ресурсов. INavigator Реализуется контейнерами навигации для обеспечения доступа к свойствам, методам и событиям, которые поддерживают навигацию. INavigatorService Интерфейс INavigatorService. Этот интерфейс будет доступен на NavigationWindow, позволяя любому реализатору INavigator регистрировать себя для участия в нацеливании Hyperlink. Перечисления NavigationMode Используется для задания режима «навигация». Делегаты BoolWrapperReturnEventHandler IntWrapperReturnEventHandler LoadCompletedEventHandler Представляет метод, который обрабатывает события NavigationApplication.LoadCompleted и NavigationWindow.LoadCompleted. LoadStartedEventHandler Представляет метод, который обрабатывает событие LoadStarted. NavigatedEventHandler Представляет метод, который обрабатывает события NavigationApplication.Navigating и NavigationWindow.Navigating. NavigateEventHandler Устарел. NavigatingNewWindowCancelEvent-Handler Представляет метод, который обрабатывает событие NavigatingNewWindow. NavigationErrorCancelEvent-Handler Этот делегат используется с событиями NavigationApplication.NavigationError и NavigationWindow.NavigationError. NavigationProgressEventHandler Представляет метод, который обрабатывает события NavigationApplication.Navigation-Progress и NavigationWindow.NavigationProgress. NavigationStoppedEventHandler Представляет метод, который обрабатывает события NavigationApplication.Navigation-Stopped и NavigationWindow.NavigationStopped. ObjectReturnEventHandler ReturnEventHandler Представляет метод, который обрабатывает событие Return. Этот класс непосредственно не поддерживается. Вместо него используется обработчик события возврата для соответствующего типизированного класса: BoolWrapperReturnEventHandler, IntWrapperReturnEventHandler, ObjectReturnEventHandler или StringReturnEventHandler. StringReturnEventHandler

Пространство имен автоматизации

Пространство 326 имен автоматизации содержит члены, используемые для поддержки доступности и автоматизации пользовательского интерфейса. Система доступности включает в себя сторону клиента и сторону поставщика. Система инструментов включает в себя инструменты автоматизации клиентской стороны, включающие в себя клиентский класс автоматизации для поиска информации пользовательского интерфейса. Клиентский класс автоматизации включает в себя инструменты регистрации событий и инструменты обнаружения логического элемента. Набор инструментов дополнительно включает в себя инструменты автоматизации стороны поставщика для предоставления клиенту информации пользовательского интерфейса. Инструменты автоматизации стороны поставщика включают в себя класс автоматизации поставщика, имеющий инструменты для предоставления клиенту информации событий.

Клиентский класс автоматизации обеспечивает методы автоматизации ПИ для одного или нескольких клиентов. Клиентский класс автоматизации содержит методы, не зависящие от конкретного элемента ПИ. Клиентский класс автоматизации может обеспечивать метод получения логического или необработанного элемента от точки, обработчика окна или настольного корневого элемента. Клиентский класс автоматизации дополнительно может обеспечивать методы отыскания логического элемента на основании входных критериев. Клиентский класс автоматизации предпочтительно включает в себя только метод регистрации и отмены регистрации для извещений о событиях. Класс автоматизации предпочтительно также обеспечивает функции помощника для загрузки посреднических DLL, извлечения локализованных имен свойств и шаблонов управления и для осуществления сравнения элементов. Клиентский класс автоматизации также включает в себя методы, позволяющие клиентам отслеживать события. В нижеследующих таблицах приведены примеры членов, объявляемых пространством имен System.Windows.Automation.

Классы ApplicationWindowPattern Объявляет поведение и информацию, обычно связанные с окном приложения верхнего уровня. Клиенты могут использовать этот класс, чтобы расположить в мозаичном порядке или каскадом потомки интерфейса множественных документов (MDI) приложения, найти его кнопки на панели задач и разместить общеизвестные секции его пользовательского интерфейса, например панели инструментов и меню. AssociatedInformationPattern Объявляет семантику и метаданные для элементов ПИ, которые представляют другие объекты. Automation Содержит методы автоматизации пользовательского интерфейса (ПИ) для клиентов (вспомогательную технологию или автоматизированный сценарий для текста). Эти методы не зависят от конкретного элемента. AutomationEvent Не используется. Этот класс будет удален в дальнейших версиях. AutomationEventArgs Шаблон или класс аргументов специального события. AutomationFocusChangedEventArgs Класс аргументов события фокуса. AutomationIdentifier Базовый класс для идентификаторов на основе идентичности объекта. Этот класс, по существу, абстрактный; только произвольные классы конкретизированы. AutomationIdentifierProxy Внутренний класс, используемый для десериализации «идентификаторов автоматизации». Не должен использоваться непосредственно. AutomationPattern Не используется. Этот класс будет удален в дальнейших версиях. AutomationPermission Обеспечивает набор разрешений для доступа к элементам ПИ. Это ненаследуемый класс. AutomationPermissionAttribute Обеспечивает методы и свойства для AutomationPermissionAttribute. Это ненаследуемый класс. AutomationProperty Не используется. Этот класс будет удален в дальнейших версиях. AutomationPropertyChangedEvent-Args Класс аргументов события PropertyChanged. AutomationTextAttribute Идентификатор для AutomationTextAttribute. AutomationTextPointer Представляет позицию символа в тексте. AutomationTextPointer обеспечивает методы и свойства для доступа к тексту и навигации по тексту. AutomationTextRange Используется для получения, установки, добавления и удаления выделения. AutomationTextSelection Цель: объект AutomationTextSelection обрабатывает все управление выделением текста. Выделение, на котором стоит указатель вставки, является активным выделением. Примеры использования: он используется, когда клиенты хотят добавить, удалить, изменить или установить выделение. Клиенты могут также узнать, что в данный момент выделено, с помощью AutomationTextSelection. AutomationTextUnit Идентификатор текстовых модулей автоматизации. BasePattern Внутренний класс. DockPattern Объявляет способность элемента изменять свое состояние примыкания во время выполнения. ElementNotEnabledException Это исключение действует, когда клиентский код пытается манипулировать элементом или средством управления, в данный момент не действующим. ElementPath ElementPath обеспечивает критерии, необходимые для последующего возращения к логическому элементу, ранее записанному, измененному или целиком созданному поставщиком приложения. ExpandCollapsePattern Объявляет возможность средства управления расширяться для отображения большего объема содержимого или сжиматься для скрытия содержимого. Примеры включают в себя кнопки меню, кнопку Start, элемент дерева просмотра в Windows Explorer и комбинированное окно. GridItemPattern Объявляет элементы сетки. Позволяет клиентам быстро определять координаты элементов сетки. GridPattern Объявляет основные функции сетки, размер и навигацию к указанным ячейкам. HierarchyItemPattern Объявляет иерархические взаимоотношения между элементами пользовательского интерфейса средства управления, независимо от их взаимоотношений в логическом дереве. Input Обеспечивает методы посылки вводимых данных от мыши или клавиатуры. InvokePattern Реализован объектами (средствами управления), осуществляющими единичное, однозначное действие. Большинство этих средств управления не поддерживают состояние; их вызов инициирует действие в приложении. Примеры средств управления, которые реализуют этот интерфейс, включают в себя нажимные кнопки, кнопки панели инструментов, элементы меню, гиперссылки, флаговые кнопки, кнопки с фиксированными состояниями, символ плюс в средстве управления просмотра по дереву и элементы списка просмотра в Windows Explorer. LogicalElement Представляет элемент ПИ в логическом дереве независимо от реализации (“Avalon”, Microsoft® Win32). LogicalStructureChangedEvent-Args Класс аргументов события «логическая структура изменилась». MultipleViewPattern Объявляет способность элемента переключаться между множественными представлениями одного и того же набора информации, данных или дочерних элементов. Примеры включают в себя ListView (указатели в виде пальца, мозаики, иконки, список, детали), таблицы Exel (круговая диаграмма, линия, панель, значение ячейки с формулой) и календарь Outlook (год, месяц, неделя, день). NoClickablePointException Исключение, которое вступает в силу, когда значение аргумента находится вне допустимого диапазона значений, что указано посредством GetClickablePoint. Например, когда ограничивающий прямоугольник пуст, не имеет ширины или высоты или логический элемент в этой точке не тот, который был вызван. ProxyAssemblyNotLoadedException Исключение вступает в силу при наличии проблемы при загрузке посреднического модуля. Это может случиться в ответ на Automation.RegisterProxyAssembly или при загрузке посредников по умолчанию, когда встречается первый базовый логический элемент hwnd. RangeValuePattern Объявляет способность средства управления регулировать значение в конечном диапазоне. Он передает пригодные минимальное и максимальное значения и текущее значение. RawElement Представляет элемент в необработанном дереве элементов. ScrollPattern Представляет элементы ПИ, выражающие значение. SelectionItemPattern Представляет отдельные элементы в контейнерах, управляющие выделением. Клиенты автоматизации ПИ используют этот класс для получения информации об элементах ПИ или манипуляции ими, которые поддерживают шаблон управления SelectionItemPattern. Примеры включают в себя любые элементы, которые могут быть выделены в средстве управления, которое поддерживает шаблон управления SelectionItemPattern, например элемент в ячейке списка или виде дерева. SelectionPattern Представляет контейнеры, управляющие выделением. Используется клиентами автоматизации ПИ для получения информации об элементах ПИ или манипуляции ими, которые поддерживают шаблон управления SelectionPattern. SortPattern Объявляет текущий порядок сортировки контейнера и позволяет клиентам программно пересортировывать элементы. SplitPattern Представляет окна, способные клонировать себя путем создания соседнего окна. TableItemPattern Представляет элементы сетки с информацией заголовка. TablePattern Представляет сетку, имеющую информацию заголовка. TextPattern Представляет текст, например управление редактированием. TopLevelWindowEventArgs Класс аргументов события TopLevelWindowEventArgs. TreeLoadEventArgs Класс аргументов события TreeLoadEventArgs. ValuePattern Объявляет значения для средств управления, которые не охватывают диапазон, например кнопки с фиксированными состояниями, кнопки-переключатели, флаговые кнопки, окна редактирования, значения цвета в формате RGB и помечаемые элементы меню. VisualInformationPattern Объявляет информацию об изображении или анимации, которое(ая) передает информацию пользователю, например развевающийся флаг Internet Explorer'а или вращающийся земной шар, который указывает документ в состоянии загрузки, или летающие бумажки Widows Explorer'а, указывающего процесс копирования документа. WindowPattern Объявляет способность элемента изменять свою позицию или свой размер на экране. Примеры включают в себя окна приложений верхнего уровня (Word или Windows Explorer), подокна главного окна Outlook (папки, сообщения электронной почты, задания) и дочерние окна MDI. ZoomPattern Объявляет текущий уровень увеличения в средстве управления и позволяет клиентам изменять его программными средствами. Перечисления AutomationPermissionFlag Содержит флаги доступа для объекта AutomationPermission. ChildArrangement Разные способы размещения дочерних элементов. DockPosition Край контейнера, к которому будет присоединено примыкающее окно. ExpandCollapseState Используется шаблоном ExpandCollapse для указания состояния расширения/сжатия. GetDataOption Опции для GetData. HierarchyItemState Перечисление, которое указывает состояние элемента иерархии: сжатое, расширенное или частично расширенное. ItemCheckState Перечисление, которое указывает состояние флаговой кнопки, кнопок с фиксированными состояниями и аналогичных средств управления. LoadState Флаги состояния дерева. LogicalMapping Значения, указывающие, будет ли отображаться узел необработанного дерева в логическом дереве. ProxyFlags Перечисление, используемое для указания результатов запроса свойства. RowOrColumnMajor Как лучше представлены данные в этой таблице: строкой или столбцом? ScopeFlags Флаги, используемые для задания объема при отслеживании событий. ScrollAmount Используется ScrollPattern для указания направления (вперед или назад) и единицы прокрутки (страницы или строки). SendMouseInputFlags Флаги для SendMouseInput. Эти флаги указывают, имеет ли место перемещение или нажаты ли или отжаты кнопки. SplitStiles Флаг для направлений, в которых может расщепляться окно. StructureChangeType Флаги, указывающие изменения в структуре логического дерева. TextPointerGravity «Тяжесть» определяет размещение AutomationTextPointer при вводе текста в месте расположения AutomationTextPointer. Тяжесть всегда с точки зрения текстовых указателей, т.е. я перед моим символом или я после моего символа. Когда пользователь вставляет символ в место расположения вашего текстового указателя, «перед» означает, что ваш указатель будет находиться перед новым символом; «после» означает, что указатель будет находиться после нового символа. WindowChangeType Флаги, указывающие изменения в окнах верхнего уровня. WindowInteractonState Текущее состояние окна для взаимодействия с пользователем. WindowVisualState Состояния, используемые для описания визуального состояния окна. WindowVisualState удовлетворяет определениям Office и HTML для WindowState. Структуры MatchCondition Задает критерии отыскания элементов с использованием FindLogicalElement или FindRawElement. NameAndData Содержит имя, данные в качестве объекта и данные в качестве строки. ProxyDescription Структура, содержащая информацию о посреднике. SortInformation Информация, используемая для сортировки. Делегаты AutomationEventHandler Делегат для обработки событий автоматизации. AutomationFocusChangedEvent-Handler Делегат для обработки событий изменения фокуса. AutomationPropertyChangedEvent-Handler Делегат для обработки событий изменения свойства автоматизации. LogicalStructureChangedEvent-Handler Делегат для обработки событий изменения логической структуры. ProxyFactoryCallback Реализован обработчиками HWND; вызывается ПИ. Структура автоматизации для запрашивания посредника на предмет указанного окна. Должен возвращать посредник, если поддерживается, или null, если не поддерживается. TopLevelWindowEventHandler Делегат для обработки событий окна верхнего уровня.

В нижеследующих таблицах приведены примеры членов, объявляемых пространством имен System.Windows.Automation.InteropProvider.

Классы AutomationInteropProvider Содержит методы, используемые приложениями или средствами управления Win32, которые реализует автоматизацию пользовательского интерфейса (ПИ). Это ненаследуемый класс. TextPointerPair Представляет непрерывный блок символов. Интерфейсы IapplicationWindowInterop-Provider Объявляет поведение и информацию, обычно связанные с окном приложения верхнего уровня. IassociatedInformationInterop-Provider Объявляет семантику и метаданные для элементов ПИ, представляющих другие объекты. IDockInteropProvider Объявляет способность элемента изменять свое состояние примыкания во время выполнения. IExpandCollapseInteropProvider Объявляет возможность средства управления расширяться для отображения большего объема содержимого или сжиматься для скрытия содержимого. Поддерживается совместно с шаблоном HierarchyItem на элементах TreeView для обеспечения древоподобного поведения, но также важно для отдельных органов управления, которые открываются и закрываются. Примеры включают в себя: элементы TreeView - интеллектуальные меню Office, которые были свернуты - шевроны на панелях инструментов - комбинированное окно - меню - «Expandos» в панели задач Windows Explorer (слева, где часто отображается вид папки). IGridInteropProvider Объявляет основные функции сетки: размер и перемещение к указанным ячейкам. IGridItemInteropProvider Представляет элемент в сетке. Не имеет методов, только свойства. IHierarchyItemInteropProvider Объявляет и позволяет клиентам обходить иерархические связи между элементами ПИ, независимо от их взаимоотношений в логическом дереве. Иерархические связи, по определению, являются незамкнутыми. Примеры ПИ, реализующего это, включают в себя: элементы TreeView - Visio Org Chart - меню-органы управления Listview, когда действует режим «показ в группах». IInvokeInteropProvider Реализован объектами (средствами управления), осуществляющими единичное, однозначное действие. Большинство этих средств управления не поддерживают состояние; их вызов инициирует действие в приложении. Примеры средств управления, которые реализуют этот интерфейс, включают в себя нажимные кнопки, кнопки панели инструментов, элементы меню, гиперссылки, флаговые кнопки, кнопки с фиксированными состояниями, символ «плюс» в средстве управления просмотра по дереву и элементы списка просмотра в Windows Explorer. IMultipleViewInteropProvider Объявляет способность элемента переключаться между множественными представлениями одного и того же набора информации, данных или дочерних элементов. Этот шаблон должен быть реализован на контейнере, управляющем текущим видом содержимого. IRangeValueInteropProvider Объявляет соответствующий набор свойств, которые отражают способность средств управления регулировать значение в конечном диапазоне. Он передает пригодные достоверные минимальные и максимальные значения средств управления и их текущее значение. Примеры: индикатор выполнения числовых циклических счетчиков, IP-контроль (на отдельных октетах), некоторые полосы прокрутки сборщиков цветов, некоторые бегунки, публичный интерфейс, который представляет элементы ПИ, которые выражают текущее значение и диапазон значений, общедоступный интерфейс имеет то же определение, что и IValueProvider. Разница между двумя шаблонами состоит в том, что RangeValue имеет дополнительные свойства, и свойства обычно не появляются в общедоступных интерфейсах шаблона. IRawElementProviderFragment Реализован поставщиками, чтобы объявлять элементы, являющиеся частью структуры, которая глубже на один уровень. Для простых одноуровневых структур, которые не имеют потомков, вместо него можно использовать IRawElementProwiderSimpe. Корневой узел фрагмента должен поддерживать интерфейс IRawElementProviderFragmentRoot, который выводится из этого и имеет некоторые дополнительные методы. IRawElementProviderFragmentRoot Корневой элемент во фрагменте ПИ должен поддерживать этот интерфейс. Другие элементы в том же фрагменте должны поддерживать интерфейс IRawElementProwiderFragment. IRawElementProviderFragmentRootAdviseEvents Реализован на корневом элементе фрагмента ПИ, что позволяет извещать об этом, когда это необходимо для инициирования событий автоматизации. IRawElementProviderHwndOverride Реализован поставщиками, которые хотят обеспечить информацию о содержащихся элементах на основе HWND или хотят изменить их позицию. IRawElementProviderOverrideType Реализован поставщиками, которые хотят обеспечить информацию о содержащихся элементах на основе HWND или хотят изменить их позицию. IRawElementProviderSimple Интерфейс поставщика автоматизации ПИ, реализованный поставщиками, которые хотят объявить свойства для одного элемента. Чтобы объявить свойства и структуру для более чем одного элемента, см. производный интерфейс IRawElementProviderFragment. IScrollInteropProvider Шаблон Scroll объявляет возможность средства управления изменять часть своей видимой области, которая видна пользователю путем прокрутки ее содержимого. Примеры: окна списков, виды дерева, другие контейнеры, которые поддерживают более обширную область содержимого, чем видимая область средства управления. Заметим, что сами полосы прокрутки не должны поддерживать шаблон Scrollbar; они поддерживают шаблон RangeValue. Серверы должны нормализовать прокрутку (от 0 до 100). Этот общедоступный интерфейс представляет элементы ПИ, которые прокручивают свое содержимое. ISelectionInteropProvider Обеспечивает доступ к свойствам, реализованным «нелонгхорновскими» поставщиками, на контейнерах, которые управляют выделением. ISelectionItemInteropProvider Обеспечивает доступ к методам и свойствам, которые задают выделенные элементы в контейнере и манипулируют ими. Поддерживается только на логических элементах, которые являются потомками элементов, поддерживающих ISelectionInteropProvider, и сами являются выделяемыми. ISortInteropProvider Объявляет текущий порядок сортировки контейнера и позволяет клиентам программно пересортировывать его элементы. Некоторые контейнеры поддерживают порядок сортировки при вставке новых элементов или перемещают свое содержимое на основании обновленного содержимого (пример: сортированные окна списка Win32). Другие контейнеры способны только осуществлять одноразовую сортировку, которая устаревает при вставке новых элементов (пример: Excel). ISplitInteropProvider Объявляет возможность расщепления области содержимого элементов на множественные подокна или интерактивные области. ITableInteropProvider Идентифицирует сетку, имеющую информацию заголовка. ITableItemInteropProvider Используется для объявления элементов сетки с информацией заголовка. ITextInteropProvider Шаблон Text объявляет способность средства управления манипулировать текстом. Примеры: средства управления TextBox, RichEdit, другие контейнеры, содержащие текст и свойства, относящиеся к тексту. Этот интерфейс представляет элементы ПИ, поддерживающие текст. ITextPointerInteropProvider Шаблон Text объявляет способность средства управления манипулировать текстом. Примеры: средства управления TextBox, RichEdit, другие контейнеры, содержащие текст и свойства, относящиеся к тексту. Этот интерфейс представляет элементы ПИ, поддерживающие текст. IValueInteropProvider Публичный интерфейс, представляющий элементы ПИ, которые выражают значение. IWindowInteropProvider Объявляет способность элемента изменять свою позицию или свой размер на экране, а также изменять состояние визуала и закрывать его. IZoomInteropProvider Объявляет текущий уровень увеличения в средстве управления и позволяет клиентам изменять его программными средствами. Перечисления NavigateDirection Направления навигации по дереву автоматизации ПИ. RawElementProviderOverrideType Указывает, действует ли поставщик как подмена или поставщик области без клиентов.

Пространство имен сериализации

Пространство 328 имен сериализации обеспечивает анализатор, который может загружать или сохранять иерархию объектов (например, элементов) из или в файле XML или файле с двоичным представлением. Этот процесс также задает свойства, связанные с объектами, и связывает обработчики событий. Кроме того, пространство 328 имен сериализации обеспечивает функции для сериализации и десериализации объектов. Сериализация - это процесс взятия существующего, находящегося в памяти, представления объектов и создания потока данных, пригодного для сохранения в запоминающем устройстве (например, на диске) или передачи по сети. Десериализация это обратный процесс; т.е. взятие потока данных и создание объектов из потока данных. Десериализацию также именуют «анализом», и код, реализующий анализ, называют анализатором.

Сериализация и десериализация поддерживают множественные потоковые форматы, например, формат XML, именуемый XAML, или двоичный формат, именуемый BAML. Когда анализатор используется с компилятором разметки, он может генерировать "CAML", где выходом является код для генерации сериализованных объектов.

Сериализация и десериализация в полном объеме поддерживают признаки XAML, включая: стандартный синтаксис, составные свойства, компактный составной синтаксис, синтаксис коллекции с явным тегом коллекции и синтаксис коллекции с неявным тегом коллекции. Сериализация и десериализация полностью расширяемы. Классы могут задавать, как они желают быть сериализованы и десериализованы, посредством нескольких механизмов, как то:

- По умолчанию имена классов обрабатываются как имена тегов разметки, и свойства и события обрабатываются как атрибуты разметки с тем же именем.

- Классы задают преобразователи типов (вспомогательные объекты, выводимые из System.ComponentModel.TypeConverter) для сериализации и десериализации значений атрибутов разметки.

- Классы могут поддерживать неявные потомки, реализуя интерфейс IAddChild (анализ) и используя атрибуты CLR для описания, как сериализовать неявные потомки.

- Классы могут решать, можно ли сериализовать/десериализовать свойство, с использованием DesignerSerializationVisibility и решать, необходимо ли сериализовать свойство на конкретном объекте, с использованием методов DefaultValueAttribute и ShouldPersist.

Или же компонент может сериализовать/десериализовать самого себя с использованием буквенного содержимого, в каковом случае сериализованная форма компонента не обязана согласовываться с правилами XAML (компонент должен быть правильным XML).

Хотя в вышеприведенных примерах используется слово «разметка», те же принципы применимы к двоичному формату (BAML).

Второй механизм расширяемости состоит в использовании «перехватов дизайнера», которые позволяют другому куску кода подключаться к сериализатору и десериализатору и вставлять и перехватывать атрибуты в ходе анализа и сериализации. Этот механизм позволяет создавать новые особенности разметки и допускает специализированную обработку существующего синтаксиса. Компилятор разметки использует перехваты дизайнера для генерации CAML.

Сериализация и десериализация поддерживают различные объекты (например, любой класс, выводимый из System.Object). Классы, выводимые из System.Windows.DependencyObject, могут задавать свойства зависимости, которые получают два дополнительных признака:

- Сериализация может автоматически указывать, когда нужно сериализовать свойство (DefaultValueAttribute/ShouldPersist не требуется).

- Анализатор может осуществлять оптимизации для ускорения загрузки.

Сериализация и десериализация поддерживают пространства имен XML и файлы определений, которые отображают пространства имен XML в пространства имен CLR. Класс Mapper позволяет задавать произвольные отображения пространств имен XML и имен тегов в классы CLR.

В нижеследующих таблицах перечислены иллюстративные члены, объявляемые пространством имен System.Windows.Serialization.

Классы CustomXamlDeserializer Базовый класс для десериализации. Его нужно разбить на подклассы, если требуется дизайн или редактирование в направлении десериализации анализатора. CustomXamlSerializer Базовый класс для сериализации. Его нужно разбить на подклассы, если требуется дизайн или редактирование в направлении десериализации анализатора. DependencyPropertyContext Контекстная информация о сериализуемом в данный момент свойстве. Сериализатор XAML отвечает за помещение экземпляра этого класса в стек контекста до сериализации любого свойства объекта. DPSerializationVisibility-Attribute Задает видимость этого свойства метода, которое видит сериализатор дизайнера. EntityContext Абстрактный класс для ObjectContext и PropertyContext. LayoutAttribute Атрибут для задания LayoutType для тега. Mapper Осуществляет отображение между универсальным идентификатором ресурса (URI) пространства имен расширяемого языка разметки (XML) и типами пространства имен Microsoft®. MamespaceMap Содержит информацию, которую Mapper использует для отображения между URI пространства имен XML и «компоновкой», для просмотра urtNamespace. ObjectContext Контекстная информация о сериализуемом в данный момент объекте. Сериализатор XAML отвечает за помещение экземпляра этого класса в стек контекста в SerializeObject. Parser Класс «анализ элементов» “Avalon”, используемый для создания дерева “Avalon”. ParserContext Обеспечивает всю контекстную информацию, используемую анализатором. PropertyContext Контекстная информация о сериализуемом в данный момент свойстве. Сериализатор XAML отвечает за помещение экземпляра этого класса в стек контекста до сериализации любого свойства объекта. TextContext Контекстная информация о сериализуемом в данный момент тексте. Сериализатор XAML отвечает за помещение экземпляра этого класса в стек контекста в SerializeObject. XamlAttributeNode XamlAttributeNode. XamlClrArrayPropertyNode XamlClrArrayPropertyNode. XamlClrArrayComplexProperty-Node XamlClrArrayComplexPropertyNode, который является объектом, указанным как дочерний по отношению к объекту clr. XamlClrEventNode XamlClrEventNode, который является событием clr любого объекта. Заметим, что это может быть на DependencyObject или на любом другом типе объекта. XamlClrObjectNode XamlClrObjectNode, который является чем-то другим по отношению к DependencyObject. XamlClrPropertyNode XamlClrPropertyNode, который очищает свойство любого объекта. Заметим, что это может быть DependencyObject или любой другой тип объекта. XamlClrPropertyParse-Exception Класс «исключение» для свойства анализатора, обеспечивающий конкретные исключения. XamlComplexDependency-PropertyNode XamlComplexDependencyPropertyNode, который является свойством зависимости, заданным как xml-потомок для DependencyObject. XamlComplexProperty-Serializer XamlComplexPropertySerializer используется для сериализации свойств, которые не могут быть сериализованы с помощью атрибутов XML. «Сложные свойства» являются экземплярами, сериализуемыми как разметка в элементе. XamlDefAttributeNode XamlDefAttributeNode. XamlDefTagNode XamlDefTagNode. XamlDependencyObject-Serializer Расширяет сериализатор XAML для включения анимаций (зависит от «элементов»). XamlDependencyPropertyNode XamlDependencyPropertyNode, который является нормальным, простым «свойством зависимости» на DependencyObject. XamlDependencyPropertyParse-Exception Класс «исключение» для динамических свойств анализатора, анализирующих конкретные исключения. XamlDesignerSerializer-Attribute Задает имя типа для сериализатора данного класса. XamlDocumentNode XamlDocumentNode. XamlElementNode XamlElementNode, который представляет DependencyObject. Они отличаются от объектов, потому что с ними связаны «свойства зависимости». XamlEndAttributesNode XamlEndAttributesNode. XamlEndClrArrayPropertyNode XamlEndClrArrayPropertyNode. XamlEndClrComplexProperty-Node XamlEndClrComplexPropertyNode. XamlEndClrObjectNode XamlEndClrObjectNode. XamlEndClrComplexDependency-PropertyNode XamlEndClrComplexDependencyProperty-Node. XamlEndDocumentNode XamlEndDocumentNode. XamlEndElementNode XamlEndElementNode. XamlEndIDictionaryProperty-Node XamlEndIDictionaryPropertyNode. XamlEndIListPropertyNode XamlEndIListPropertyNode. XamlEndIResourceNode XamlEndIResourceNode. XamlEndStertElementNode XamlEndStertElementNode. XamlIDictionaryPropertyNode XamlIDictionaryPropertyNode. XamlIEnumeratorSerializer Сериализует коллекцию узлов, указанную свойством. XamlIListPropertyNode XamlIListPropertyNode. XamlIListSerializer Сериализует IList, указанный этим свойством. XamlIIncludeTagNode XamlIIncludeTagNode. XamlILanguageNode XamlILanguageNode. XamlILiteralContentNode XamlILiteralContentNode. XamlNode Базовый класс «узел», из которого выводятся все остальные. XamlParseException Класс «исключение» для исключений, зависящих от анализатора. XamlPIMappingNode XamlPIMappingNode, который отображает любое пространство имен в пространство имен CLR и «компоновку». XamlResourceNode XamlResourceNode. XamlRootSerializer Сериализатор XAML, используемый для сохранения логики. XamlRoutedEventNode XamlRoutedEventNode. XamlSerializationCallback-Exception Класс «исключение» для исключений, зависящих от обратного вызова сериализации. XamlSerializer XamlSerializer используется для сохранения дерева. XamlSerializerBase Базовый класс для XamlSerializer, снабженный общими функциями помощника. XamlTextNode XamlTextNode. XamlTextNodeSerializer Подменяет XamlSerializer особыми «узлами текста». XamlXmlnsPropertyNode XamlXmlnsPropertyNode. XamlAttributes Класс для инкапсуляции зависящих от XML атрибутов для DependencyObject. XmlnsDictionary Словарь для контроля отображений пространства имен XML. XmlParserDefaults Публичный класс, используемый Avalon. Интерфейсы IAddChild Интерфейс IAddChild используется для анализа объектов, которые допускают объекты или текст под их тегами в разметке, которые непосредственно не отображаются в свойство. IBamlSerialize Интерфейс сериализации для динамических свойств, записанных в файлы BAML. ILoaded Этот интерфейс обеспечивает булево свойство только для чтения, именуемое IsLoaded, обработчик событий clr, именуемый Loaded, и методы DeferLoad и EndDeferLoad. IPageConnector Обеспечивает методы, которые внутренне использует BamlReader на компилированном контексте. IParseLiteralContent Для буквенного содержимого - содержимое, имеющее собственные анализатор и средство сохранения. IUriContext Интерфейс IUriContext позволяет элементам (например, «кадр», «просмоторщик страниц») и преобразователям типов (например, преобразователям типов данных изображения) каким-то образом убедиться, что базовый URI задан на них анализатором, генератором кодов для классов XAML, BAML и CAML. Затем элементы используют этот базовый URI для навигации. Перечисления LayoutType Типы компоновки, которые могут быть связаны с объектом. SerializationAction Описывает действие сериализатора или десериализатора после того, как он сделал обратный вызов помощникам CustomXamlSerializer или CustomXamlDeserializer. SerializationErrorAction Описывает действие сериализатора или десериализатора после сообщения об ошибке. XamlNodeType Идентификатор для узлов XAML.

Пространство имен взаимодействия

Пространство 330 имен взаимодействия обеспечивает набор классов, которые допускают взаимодействия с другими операционными системами или вычислительными платформами. В нижеследующих таблицах перечислены иллюстративные члены, объявляемые пространством имен System.Windows.Interop.

Классы ApplicationProxy Упаковщик MarshalByRefObject над классом Application, позволяющий взаимодействовать с объектом Application через «домены приложения» и позволяющий создавать «приложение» на другом потоке. DocobjHost Класс Interop, используемый для реализации управляемой части сервера Docobj для хостирования браузера. PresentationInteropHelper VisualInteropHelper. Реализует Avalon. WindowInteropHelper Классы WindowInteropHelper, которые помогают взаимодействию существующего окна b/w и окна Avalon. Делегаты AppEntryPoint Делегат для метода точки входа кода приложения.

Пространство имен Forms.Interop

Пространство 332 имен forms.interop обеспечивает элемент, позволяющий приложению размещать операцию управления формами.

Пространство имен System.IO.CompoundFile

Еще одно пространство имен, System.IO.CompoundFile (не показано на фиг.3), обеспечивает услуги для использования составного файла, в котором хранятся различные распространяемые файлы документа. Эти услуги позволяют шифровать и сжимать содержимое. Услуги также поддерживают хранение множественных интерпретаций одного и того же содержимого, например переформатируемый документ и документ фиксированного формата. В нижеследующих таблицах приведены примеры членов, объявляемых пространством имен System.IO.CompoundFile.

Классы CertficateHelper Помощник для получения цифрового сертификата для подписи. CompoundFileByteRangeReference Компонент ссылки на подпоток, который ссылается на диапазон байтов в потоке составного файла. CompoundFileIndexReference Компонент ссылки на подпоток, который ссылается на логический элемент в потоке составного файла. CompoundFileReference Ссылка на фрагмент составного файла. CompoundFileReferenceCollection Коллекция только для чтения ссылок на составной файл. CompoundFileStorageReference Логическая ссылка на хранилище контейнера. CompoundFileStreamReference Логическая ссылка на поток контейнера. CompressionTransform «Преобразование сжатия» для использования в пространствах данных составного файла. ContainerHelper Этот класс позволяет пользователям получать доступ к StorageRoot текущего контейнера на основании загруженного экземпляра приложения. DataSpaceManager Используется для манипулирования пространствами данных в конкретном экземпляре контейнера “Avalon”. То есть как модули преобразования данных включаются в контейнер для обеспечения таких особенностей, как сжатие данных и шифрование данных. DigitalSignature Класс только для чтения, который позволяет клиентам проверять и удостоверять существующие цифровые подписи. DigitalSignatureCollection Коллекция только для чтения цифровых подписей. DigitalSignatureManager Этот класс используется для создания, сохранения и манипулирования цифровыми подписями в составном файле. DocumentSummaryInfo Содержит элементы свойства, соответствующие свойствам в стандартном наборе свойств информации краткого изложения документа OLE. FormatVersion Класс для манипулирования объектом версии. InstanceDataFormatException Исключение, вступающее в силу в случае неправильного формата DrmTransformInstanceData на диске. OleProperty PropSet RenditionInfo Класс для манипулирования информацией интерпретации. Этот класс также обеспечивает API для добавления и удаления хранилищ и потоков в и из интерпретации. RenditionInfoCollection Сильно типизированная коллекция объектов RenditionInfo. RenditionManager Класс для манипулирования интерпретациями в контейнере. RightsManagementEncriptionTransform Класс реализует интерфейс IDataTransform, что дает возможность использовать его в качестве преобразования данных контейнера, которое реализует RM-шифрование и дешифрование содержания. StorageInfo Класс для манипулирования хранилищами в контейнере. StorageRoot Представляет главный класс контейнера. Это один экземпляр StorageRoot на составной файл. StreamInfo Обеспечивает доступ для манипулирования потоками в файле-контейнере. SummaryInfo TransformEnvironment Экземпляр этого класса дан каждому объекту преобразования в качестве средства для объекта преобразования для взаимодействия со средой, обеспечиваемой менеджером пространства данных. Объект преобразования не обязан сохранять ссылку на данном объекте TransformEnvironment, поскольку ее можно выбирать для ее отмены, если не нужно взаимодействовать со средой преобразования. TransformInitializationEventArgs Общедоступный класс для передачи аргументов обработчикам событий. UseLicenseInfo Содержит информацию, описывающую лицензию на использование, возвращаемую от сервера Tungsten. UseLicenseInfoEnumerator Представляет перечислитель лицензий на использование, хранящихся в данных экземпляра преобразования DRM. VersionTuple Класс для кортежа версий, который состоит из старшего и младшего номеров. XmlDigitalSignatureProcessor Процессор подписей, используемый менеджером цифровых подписей для подписания и удостоверения данных в соответствии с рекомендацией W3C. Интерфейсы IDataTransform Интерфейс, подлежащий реализации всеми объектами преобразования данных. ILicenseStorage Этот интерфейс используется для разделения RMTransform и RMWizard. Построив специализированную реализацию этого интерфейса, мы позволяем 3-м сторонам пользоваться RMWizard, не вынуждая их использовать RMTransform. ISignatureProcessor Интерфейс процессора подписей. IUnknownRCW Этот интерфейс используется для непрозрачного оперирования любым интерфейсом COM (упакованным в упаковщик COM времени выполнения) в качестве IUnknown. Перечисления DigitalSignatureProcessor Заранее заданные процессоры цифровых подписей. SignatureProcessorNameType Тип процессора цифровых подписей. TransformIdentifierTypes При присвоении имени объекту преобразования передаваемая строка может интерпретироваться одним из нескольких способов. Этот перечислительный тип используется для задания семантики строки идентификации. Делегаты InvalidSignatureHandler Вызывается при наличии подписей, которые не прошли проверку хэшированием. TransformInitializeEventHandler Метод делегата для инициализации преобразований.

Пространство имен System.Windows.Automation

Пространство имен System.Windows.Automation содержит члены, используемые для поддержки доступности и автоматизации пользовательского интерфейса. Система доступности включает в себя сторону клиента и сторону поставщика. Система инструментов включает в себя инструменты автоматизации клиентской стороны, включающие в себя клиентский класс автоматизации для поиска информации пользовательского интерфейса. Клиентский класс автоматизации включает в себя инструменты регистрации событий и инструменты обнаружения логического элемента. Набор инструментов дополнительно включает в себя инструменты автоматизации стороны поставщика для предоставления клиенту информации пользовательского интерфейса. Инструменты автоматизации стороны поставщика включают в себя класс автоматизации поставщика, имеющий инструменты для предоставления клиенту информации событий.

Клиентский класс автоматизации обеспечивает методы автоматизации ПИ для одного или нескольких клиентов. Клиентский класс автоматизации содержит методы, не зависящие от конкретного элемента ПИ. Клиентский класс автоматизации может обеспечивать метод получения логического или необработанного элемента от точки, обработчика окна или корневого элемента «рабочего стола». Клиентский класс автоматизации дополнительно может обеспечивать методы отыскания логического элемента на основании входных критериев. Клиентский класс автоматизации, предпочтительно, включает в себя только метод регистрации и отмены регистрации для извещений о событиях. Класс автоматизации, предпочтительно, также обеспечивает функции помощника для загрузки посреднических DLL, извлечения локализованных имен свойств и шаблонов управления и для осуществления сравнения элементов. Клиентский класс автоматизации также включает в себя методы, позволяющие клиентам отслеживать события. В нижеследующих таблицах приведены примеры членов, объявляемых пространством имен System.Windows.Automation.

Классы ApplicationWindowPattern Объявляет поведение и информацию, обычно связанные с окном приложения верхнего уровня. Клиенты могут использовать этот класс, чтобы расположить в мозаичном порядке или каскадом потомки интерфейса множественных документов (MDI) приложения, найти его кнопки на панели задач и разместить общеизвестные секции его пользовательского интерфейса, например панели инструментов и меню. AssociatedInformationPattern Объявляет семантику и метаданные для элементов ПИ, которые представляют другие объекты. Automation Содержит методы автоматизации пользовательского интерфейса (ПИ) для клиентов (вспомогательную технологию или автоматизированный сценарий для текста). Эти методы не зависят от конкретного элемента. AutomationEvent Не используется. Этот класс будет удален в дальнейших версиях. AutomationEventArgs Шаблон или класс аргументов специального события. AutomationFocusChangedEventArgs Класс аргументов события фокуса. AutomationIdentifier Базовый класс для идентификаторов на основе идентификационной информации объекта. Этот класс, по существу, абстрактный; только произвольные классы конкретизированы. AutomationIdentifierProxy Внутренний класс, используемый для десериализации «идентификаторов автоматизации». Не должен использоваться непосредственно. AutomationPattern Не используется. Этот класс будет удален в дальнейших версиях. AutomationPermission Обеспечивает набор разрешений для доступа к элементам ПИ. Это ненаследуемый класс. AutomationPermissionAttribute Обеспечивает методы и свойства для AutomationPermissionAttribute. Это ненаследуемый класс. AutomationProperty Не используется. Этот класс будет удален в дальнейших версиях. AutomationPropertyChangedEventArgs Класс аргументов события PropertyChanged. AutomationTextAttribute Идентификатор для AutomationTextAttribute. AutomationTextPointer Представляет позицию символа в тексте. AutomationTextPointer обеспечивает методы и свойства для доступа к тексту и навигации по тексту. AutomationTextRange Используется для получения, установки, добавления и удаления выделения. AutomationTextSelection Цель: объект AutomationTextSelection обрабатывает все управление выделением текста. Выделение, на котором стоит указатель вставки, является активным выделением. Примеры использования: он используется, когда клиенты хотят добавить, удалить, изменить или установить выделение. Клиенты могут также узнать, что в данный момент выделено, с помощью AutomationTextSelection. AutomationTextUnit Идентификатор текстовых модулей автоматизации. BasePattern Внутренний класс. DockPattern Объявляет способность элемента изменять свое состояние примыкания во время выполнения. ElementNotEnabledException Это исключение действует, когда клиентский код пытается манипулировать элементом или средством управления, в данный момент не действующим. ElementPath ElementPath обеспечивает критерии, необходимые для последующего возвращения к логическому элементу, ранее записанному, измененному или целиком созданному поставщиком приложения. ExpandCollapsePattern Объявляет возможность средства управления расширяться для отображения большего объема содержимого или сжиматься для скрытия содержимого. Примеры включают в себя кнопки меню, кнопку Start, элемент дерева просмотра в Windows Explorer и комбинированное окно. GridItemPattern Объявляет элементы сетки. Позволяет клиентам быстро определять координаты элементов сетки. GridPattern Объявляет основные функции сетки, размер и навигацию к указанным ячейкам. HierarchyItemPattern Объявляет иерархические взаимоотношения между элементами пользовательского интерфейса средства управления, независимо от их взаимоотношений в логическом дереве. Input Обеспечивает методы пересылки вводимых данных от мыши или клавиатуры. InvokePattern Реализован объектами (средствами управления), осуществляющими единичное, однозначное действие. Большинство этих средств управления не поддерживают состояние; их вызов инициирует действие в приложении. Примеры средств управления, которые реализуют этот интерфейс, включают в себя нажимные кнопки, кнопки панели инструментов, элементы меню, гиперссылки, флаговые кнопки, кнопки с фиксированными состояниями, символ плюс в средстве управления просмотра по дереву и элементы списка просмотра в Windows Explorer. LogicalElement Представляет элемент ПИ в логическом дереве независимо от реализации (“Avalon”, Microsoft® Win32). LogicalStructureChangedEventArgs Класс аргументов события «логическая структура изменилась». MultipleViewPattern Объявляет способность элемента переключаться между множественными представлениями одного и того же набора информации, данных или дочерних элементов. Примеры включают в себя ListView (указатели в виде пальца, мозаики, иконки, список, детали), таблицы Excel (круговая диаграмма, линия, панель, значение ячейки с формулой) и календарь Outlook (год, месяц, неделя, день). NoClickablePointException Исключение, которое вступает в силу, когда значение аргумента находится вне допустимого диапазона значений, что указано посредством GetClickablePoint. Например, когда ограничивающий прямоугольник пуст, не имеет ширины или высоты или логический элемент в этой точке не тот, который был вызван. ProxyAssemblyNotLoadedException Исключение вступает в силу при наличии проблемы при загрузке посреднического модуля. Это может случиться в ответ на Automation.RegisterProxyAssembly или при загрузке посредников по умолчанию, когда встречается первый базовый логический элемент hwnd. RangeValuePattern Объявляет способность средства управления регулировать значение в конечном диапазоне. Он передает пригодные минимальное и максимальное значения и текущее значение. RawElement Представляет элемент в необработанном дереве элементов. ScrollPattern Представляет элементы ПИ, выражающие значение. SelectionItemPattern Представляет отдельные элементы в контейнерах, управляющие выделением. Клиенты автоматизации ПИ используют этот класс для получения информации об элементах ПИ или манипуляции ими, которые поддерживают шаблон управления SelectionItemPattern. Примеры включают в себя любые элементы, которые могут быть выделены в средстве управления, которое поддерживает шаблон управления SelectionItemPattern, например элемент в ячейке списка или виде дерева. SelectionPattern Представляет контейнеры, управляющие выделением. Используется клиентами автоматизации ПИ для получения информации об элементах ПИ или манипуляции ими, которые поддерживают шаблон управления SelectionPattern. SortPattern Объявляет текущий порядок сортировки контейнера и позволяет клиентам программно пересортировывать элементы. SplitPattern Представляет окна, способные клонировать себя путем создания соседнего окна. TableItemPattern Представляет элементы сетки с информацией заголовка TablePattern Представляет сетку, имеющую информацию заголовка. TextPattern Представляет текст, например управление редактированием. TopLevelWindowEventArgs Класс аргументов события TopLevelWindowEventArgs. TreeLoadEventArgs Класс аргументов события TreeLoadEventArgs. ValuePattern Объявляет значения для средств управления, которые не охватывают диапазон, например кнопки с фиксированными состояниями, кнопки-переключатели, флаговые кнопки, окна редактирования, значения цвета в формате RGB и помечаемые элементы меню. VisualInformationPattern Объявляет информацию об изображении или анимации, которое(ая) переносит информацию пользователю, например развевающийся флаг Internet Explorer'а или вращающийся земной шар, который указывает документ в состоянии загрузки, или летающие бумажки Widows Explorer'а, указывающего процесс копирования документа. WindowPattern Объявляет способность элемента изменять свою позицию или свой размер на экране. Примеры включают в себя окна приложений верхнего уровня (Word или Windows Explorer), подокна главного окна Outlook (папки, сообщения электронной почты, задания) и дочерние окна MDI. ZoomPattern Объявляет текущий уровень увеличения в средстве управления и позволяет клиентам изменять его программными средствами. Перечисления AutomationPermissionFlag Содержит флаги доступа для объекта AutomationPermission. ChildArrangement Разные способы размещения дочерних элементов. DockPosition Край контейнера, к которому будет присоединено примыкающее окно. ExpandCollapseState Используется шаблоном ExpandCollapse для указания состояния расширения/сжатия. GetDataOption Опции для GetData. HierarchyItemState Перечисление, которое указывает состояние элемента иерархии: сжатое, расширенное или частично расширенное. ItemCheckState Перечисление, которое указывает состояние флаговой кнопки, кнопок с фиксированными состояниями и аналогичных средств управления. LoadState Флаги состояния дерева. LogicalMapping Значения, указывающие, будет ли отображаться узел необработанного дерева в логическом дереве. ProxyFlags Перечисление, используемое для указания результатов запроса свойства. RowOrColumnMajor Как лучше представлены данные в этой таблице: строкой или столбцом? ScopeFlags Флаги, используемые для задания объема при отслеживании событий. ScrollAmount Используется ScrollPattern для указания направления (вперед или назад) и единиц прокрутки (страницы или строки). SendMouseInputFlags Флаги для SendMouseInput. Эти флаги указывают, имеет ли место перемещение или нажаты ли или отжаты кнопки. SplitStiles Флаг для направлений, в которых может расщепляться окно. StructureChangeType Флаги, указывающие изменения в структуре логического дерева. TextPointerGravity «Тяжесть» определяет размещение AutomationTextPointer при вводе текста в месте расположения AutomationTextPointer. Тяжесть всегда с точки зрения текстовых указателей, т.е. я перед моим символом или я после моего символа. Когда пользователь вставляет символ в место расположения вашего текстового указателя, «перед» означает, что ваш указатель будет находиться перед новым символом; «после» означает, что указатель будет находиться после нового символа. WindowChangeType Флаги, указывающие изменения в окнах верхнего уровня. WindowInteractonState Текущее состояние окна для взаимодействия с пользователем. WindowVisualState Состояния, используемые для описания визуального состояния окна. WindowVisualState отвечает определениям Office и HTML для WindowState. Структуры MatchCondition Задает критерии отыскания элементов с использованием FindLogicalElement или FindRawElement. NameAndData Содержит имя, данные в качестве объекта и данные в качестве строки. ProxyDescription Структура, содержащая информацию о посреднике. SortInformation Информация, используемая для сортировки. Делегаты AutomationEventHandler Делегат для обработки событий автоматизации. AutomationFocusChangedEventHandler Делегат для обработки событий изменения фокуса. AutomationPropertyChangedEvent-Handler Делегат для обработки событий изменения свойства автоматизации. LogicalStructureChangedEvent-Handler Делегат для обработки событий изменения логической структуры. ProxyFactoryCallback Реализован обработчиками HWND; вызывается ПИ. Структура автоматизации для запрашивания посредника на предмет указанного окна. Должен возвращать посредник, если поддерживается, или null, если не поддерживается. TopLevelWindowEventHandler Делегат для обработки событий окна верхнего уровня.

Пространство имен System.Windows.Ink

Пространство System.Windows.Ink имен обеспечивает классы, которые поддерживают системы обработки рукописей (данных, полученных от устройства перьевого ввода). Приемы обработки электронных рукописей, в частности, применимы к анализу электронных рукописей, в том числе анализу расположения, классификации и распознавания электронных рукописей. Некоторые приемы обработки электронных рукописей позволяют обрабатывать электронные рукописи асинхронно по отношению к работе прикладной программы, реализующей приемы, что позволяет обрабатывать электронную рукопись, не останавливая или значительно не задерживая работу прикладной программы. Прикладная программа может даже продолжать принимать новый ввод электронной рукописи во время обработки предыдущего ввода электронной рукописи.

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

В конкретных вариантах осуществления элементы файла или документа можно описывать на основании их пространственного положения относительно друг друга. Например, как штрихи электронной рукописи, так и машинописный текст можно описывать в одной и той же пространственной системе координат. Используя пространственную информацию для описания элементов документа, прикладная программа, управляющая документом, может поддерживать структуру данных, описывающую соотношения между ее элементами документа. В частности, прикладная программа может поддерживать структуру данных, описывающую класс различных элементов документов и задающую связи между различными элементами документа. Эти связи могут быть заданы, например, в виде информации, используемой для привязки данных штриха электронной рукописи или их коллекций к другим элементам в электронном документе (как то: слова, строки, абзацы, рисунки, ячейки таблицы и т.д.).

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

Для анализа нового ввода электронной рукописи в документ прикладная программа, управляющая документом, изменяет структуру данных, связанную с документом, для включения новой рукописи, подлежащей анализу. Затем прикладная программа передает эту структуру данных (или ее соответствующие части) инструменту анализа рукописей, который копирует частично или полностью структуру данных для анализа (и оперирует на этой копии данных, которая не зависит от структуры данных документа прикладной программы). Инструмент анализа рукописей передает копию процессу анализа, например процессу разбора (например, процессу анализа расположения и/или процессу классификации). Прикладная программа может возобновить свою нормальную работу, включая получение нового ввода электронной рукописи и/или других данных, во время осуществления процесса(ов) анализа рукописи. Помимо получения новой электронной рукописи, прикладная программа может получать любые «другие данные», например данные, изменяющие размер, местоположение или содержимое существующей рукописи, текста, изображений, графики, таблиц, блок-схем, диаграмм и т.п.; данные, удаляющие существующие текст, изображения, графики, таблицы, блок-схемы, диаграммы и т.п. По завершении всех нужных процессов анализа, результаты анализа возвращаются инструменту анализа рукописей.

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

В одном варианте осуществления API, воплощающий реализацию инструмента анализа рукописей (ниже именуемый API анализа рукописей), может содержать два основных класса. Первый класс называется «контекст анализа», а второй класс называется «анализатор рукописей». Компоненты класса «контекст анализа» используются для создания объекта контекста анализа. Затем компоненты класса «анализатор рукописей» используются для создания и применения объекта, который передает объект контекста анализа, не зависящий от документа, процессу анализа, определяет, когда были сгенерированы результаты анализа, и согласовывает результаты анализа с текущим состоянием документа.

Класс «контекст анализа» реализуется приложением хоста для создания объекта контекста анализа, который служит для посреднического просмотра внутреннего документа дерева прикладной программы. Объект контекста анализа содержит все непроанализированные данные рукописи, и объект контекста анализа используется для определения, какие непроанализированные данные рукописи следует проанализировать. Объект контекста анализа также содержит информацию о ранее проанализированной рукописи. Эту ранее проанализированную рукопись можно использовать для определения, как следует анализировать непроанализированную на данный момент рукопись, и она сама может изменяться в процессе анализа непроанализированной рукописи. Кроме того, объект контекста анализа содержит информацию о нерукописном содержимом документа, которая используется для надлежащей классификации рукописи в виде аннотаций к нерукописному содержимому.

Класс «контекст анализа» включает в себя конструктор, который, будучи вызван прикладной программой, создает объект контекста анализа. Этот класс может также включать в себя различные свойства объекта контекста анализа, в том числе свойство, именуемое "Dirty Region {get;}". Свойство «грязная область» задает часть документа (и, таким образом, часть объекта контекста анализа), содержащую непроанализированные данные рукописи.

Класс «контекст анализа» также может включать в себя свойство, именуемое "Rootnode {get;}", которое идентифицирует верхний или корневой узел контекста в объекте контекста анализа. Этот корневой узел контекста содержит в качестве дочерних узлов контекста все остальные объекты узлов контекста для данного объекта контекста анализа. В конкретных вариантах осуществления корневой узел контекста должен иметь тип узла контекста "Root". Согласно вариантам осуществления, в которых приложение реализует свой собственный объект контекста анализа, объект контекста анализа может иметь другие узлы контекста, например узлы-братья корневого узла контекста, но компоненты класса «анализатор рукописей» могут быть ограничены учетом узлов контекста, содержащихся в корневом узле контекста.

Класс «контекст анализа» может дополнительно включать в себя свойство "Analysis Hints {get;}", которое возвращает массив объектов подсказок анализа, заданный прикладной программой. Как будет рассмотрено более подробно ниже, объекты подсказки анализа могут содержать любой тип информации, которая может способствовать процессу анализа. Эта информация может включать в себя, например, фактоиды, руководства или список слов. Она также может включать в себя информацию, задающую язык, подлежащий использованию для анализа, информацию, обозначающую непроанализированную рукопись только как рукописный текст или только как рисунок, или обеспечивающую любой вид управления процессом разбора, например идентификацию рукописи в качестве списков, таблиц, форм, блок-схем, соединителей, контейнеров и т.п.

Помимо этих свойств, класс «контекст анализа» может также включать в себя различные методы, которые могут вызываться, например, прикладной программой, чтобы объект контекста анализа выполнял задание. Например, класс «контекст анализа» может включать в себя метод, именуемый "FindNode (Guid id)". Каждый узел в объекте контекста анализа имеет глобальный уникальный идентификатор (GUID), и этот метод размещает узел, указанный в вызове, в любом месте объекта контекста анализа.

Подобно классу «контекст анализа», класс «анализатор рукописей» также задает общедоступный конструктор, который позволяет прикладной программе создавать экземпляр класса (т.е. объект анализатор рукописей) совместно с различными свойствами. Например, он может содержать свойство, именуемое "User Interface Context {get; set;}", которое задает поток обработки, которому возвращаются результаты процесса анализа. Это свойство позволяет синхронизировать результаты с другим объектом. Например, в случае установки на главную форму, результаты анализатора будут инициированы на главном потоке приложения. Он также может содержать свойство "AnalysisOptions AnalysisOptions {get; set;}", которое задает различные критерии, которые можно использовать для процесса анализа. Эти критерии могут включать в себя, например, разрешение распознавания текста, разрешение использования таблиц, разрешение использования списков, разрешение использования примечаний и разрешение использования соединителей и контейнеров.

Класс «анализатор рукописей» включает в себя различные методы. Например, этот класс может включать в себя метод, именуемый "AnalysisRegion Analyze ()". Этот метод начинает синхронный процесс анализа. Этому методу передаются данные элемента документа, которые описывают текущее состояние документа и указывают, какую рукопись в документе нужно анализировать. Согласно некоторым вариантам осуществления, данные элемента документа можно обеспечивать как объект контекста анализа (т.е. AnalysisRegion Analyze (Analysis Context)), как указано выше. Альтернативно, в процесс анализа можно передавать отдельные штрихи рукописи, либо используя ссылку на штрихи (т.е. AnalysisRegion Analyze (Strokes)), либо в виде свойства объекта анализатора рукописей (например, InkAnalyzer.Strokes {get;set}) без передачи каких-либо свойств методу Analyze.

По завершении процесса анализа этот метод возвращает ссылку на объект контекста анализа, не зависящий от документа, который может быть изменен так, чтобы содержать результаты процесса анализа. Метод также возвращает значение AnalysisRegion, описывающее область документа, где были вычислены результаты.

Класс «анализатор рукописей» также может включать в себя метод, именуемый "AnalysisRegion Analyze(AnalysisContext, waitRegion)". Этот метод подобен вышеописанному асинхронному методу Analysis Region Analyze (), но он анализирует рукопись, только если результаты необходимы в указанной области waitRegion. В частности, вызов этого метода идентифицирует объект контекста анализа и область объекта контекста анализа (именуемую "waitRegion"), для которой процесс анализа должен анализировать синхронно. В некоторых вариантах осуществления все остальные области объекта контекста анализа игнорируются, пока процессу анализа не понадобится проанализировать содержимое в этих областях, чтобы завершить свой анализ waitRegion. Согласно рассмотренному выше, объект контекста анализа, передаваемый посредством этого метода, содержит свойство, именуемое "DirtyRegion", которое описывает области документа, которые нужно проанализировать. Задав конкретную waitRegion, прикладная программа может быстрее получить результаты анализа для конкретной области, представляющей интерес, без необходимости анализировать все данные рукописи в документе. При вызове любого из этих методов Analyze выполняется каждый доступный процесс анализа. Кроме того, поскольку эти методы Analyze являются синхронными вызовами, нет необходимости выполнять процесс согласования по их заключении, а также инициировать событие по его завершении.

Класс «анализатор рукописей» также может включать в себя метод, именуемый "BackgroundAnalyze(AnalysisContext)". Этот метод начинает указанную операцию анализа, но делает это в отдельном фоновом потоке анализа. Таким образом, этот метод возвращает управление главному потоку обработки почти сразу же по завершении фактической операции анализа в фоновом режиме. В частности, этот метод возвращает значение «истина», если процесс анализа начался успешно. Опять же, значение AnalysisContext, передаваемое методу, идентифицирует объект контекста анализа для документа и указывает, какую рукопись в документе нужно проанализировать. По завершении операции анализа в фоновом потоке инициируется событие «результаты», чтобы прикладная программа могла обратиться к результатам. Событие содержит результаты и метод согласования, который используется для включения результатов обратно в объект контекста анализа для текущего состояния документа после возвращения результатов.

Каждый из этих методов Analyze по очереди вызывает метод "Clone" в классе «область анализа». Используя метод "Clone", эти методы Analyze создают независимый от документа объект контекста анализа, который впоследствии изменяется процессом анализа, чтобы показывать результаты анализа.

Класс «анализатор рукописи» также может включать в себя метод, именуемый "Reconcile (AnalysisContext current, AnalysisResultsEventArgs resultArgs)", который прикладная программа вызывает после получения события результата, обусловленного вызовом метода BackgroundAnalyze(AnalysisContext). Метод Reconcile сравнивает результаты анализа, содержащиеся в независимом от документа объекте контекста анализа, с текущей версией объекта контекста анализа, поддерживаемого прикладной программой. Этот метод идентифицирует узлы, которые нужно добавить или удалить из текущей версии объекта контекста анализа, и определяет, изменились ли какие-либо из следующих свойств: его результаты распознавания, его местоположение, штрихи, связанные с узлом, или любые другие данные, связанные с результатами операции анализа. Этот метод также записывает эти идентифицированные изменения в текущую версию объекта контекста анализа. Этот метод зависит от упорядочения узлов контекста, например порядка узлов контекста слова на узле контекста строки.

Результаты анализа (т.е. значение свойства AnalysisResultsEventArgs) передаются обратно посредством этого метода, поскольку они содержат публичную (открытую) структуру результатов и приватную структуру результатов. Возращение публичной структуры результатов позволяет прикладной программе заранее просматривать изменения, которые произойдут на этапе согласования. Приватная структура включена, чтобы не давать прикладной программе изменить какие-либо результаты анализа до процесса согласования.

Класс «анализатор рукописей» может также включать в себя методы, именуемые "Recognizers RecognizersPriority()" и "SetHighestPriorityRecognizer(recognizer)." Когда необходимо распознать рукопись, используется соответствующий распознаватель в зависимости от языка и возможностей. Соответственно метод Recognizers RecognizersPriority() возвращает процессы распознавания в том порядке, в каком они будут оцениваться объектом Ink Analyzer. Порядок определяется для каждой системы в отдельности в зависимости от имеющихся процессов распознавания, но может быть подменен прикладной программой путем вызова SetHighestPriorityRecognizer(recognizer) на объекте Ink Analyzer. InkAnalyzer будет обходить этот упорядоченный список, пока не найдет надлежащий распознаватель. Метод SetHighestPriorityRecognizer(recognizer) повышает приоритет процесса распознавания. Благодаря повышению приоритета конкретного процесса распознавания этот процесс распознавания будет использоваться, если он соответствует нужному языку и возможностям текущей операции распознавания. В сущности, SetHighestPriorityRecognizer(recognizer) перемещает указанный процесс распознавания к вершине списка, возвращаемого методом RecognizersPriority.

Класс «анализатор рукописей» может также содержать метод, именуемый "AnalysisRegion Abort()", который может использовать объект контекста анализа в качестве параметра. Этот метод позволяет рано заканчивать высокоприоритетную или низкоприоритетную операцию анализа. Этот метод возвращает область анализа, которая описывает область, которая анализировалась до прерывания. Таким образом, если прикладная программа намеревается продолжить операцию анализа в будущем, то эта область может быть включена в «грязную область» объекта контекста анализа для текущего состояния документа. Кроме того, класс «анализатор рукописей» может включать в себя событие, именуемое "AnalysisResultsEventHandler", которое инициируется для объекта InkAnalyzer настолько часто, насколько это возможно с практической точки зрения. В частности, это событие может инициироваться между процессами анализа и, по меньшей мере, каждые пять секунд. Это событие можно использовать для предоставления приложению обновления до состояния идущего асинхронного процесса(ов) анализа.

API анализа рукописей могут также включают в себя классы помимо класса «контекст анализа» и класса «анализатора рукописей». Например, API анализа рукописей может включать в себя класс «узел контекста». Этот класс может включать в себя различные компоненты, относящиеся к узлам контекста, которые создают объект контекста анализа и независимый от документа объект контекста анализа, например свойство, именуемое "ContextNodeType Type {get;}". Каждый узел контекста имеет тип, и имеется конкретный набор правил, к которому каждый тип должен быть присоединен. Он включает в себя правила, например, относительно того, какие типы дочерних узлов контекста разрешены, и можно ли связывать штрихи непосредственно с узлом контекста или только через его дочерние узлы контекста.

Возможные типы узлов контекста могут быть определены в перечислении ContextNodeTypes и могут включать в себя, например, следующие типы: узел InkAnnotation, который представляет данные рукописи, аннотирующие нетекстовые данные; узел InkDrawing, который представляет данные рукописи, образующие рисунок, узел InkWord, который представляет данные рукописи, образующие слово, узел Line (строка), который содержит один или несколько узлов InkWord и/или узлов TextWord для слов, образующих строку текста; узел ListItem (элемент списка), который может содержать узлы Paragraph (абзац), Image (изображение) и пр., предполагаемые в списке; и узел List (список), который содержит один или несколько узлов ListItem, каждый из которых описывает элемент списка. Типы узлов могут также включать в себя узел NonInkDrawing, представляющий нерукописное изображение рисунка; узел Object, представляющий данные, не охваченные другими значениями перечисления ContextNodeType; узел Paragraph, который содержит один или несколько узлов Line, соответствующих строкам, образующим абзац; узел Picture или Image, представляющий изображение картинки; узел Root, играющий роль верхнего узла в объекте контекста анализа; узел Table, который содержит узлы, представляющие элементы, образующие таблицу; узел TextBox, представляющий текстовое окно; узел TextWord; и узел UnclassifiedInk, соответствующий данным рукописи, которые еще не классифицированы. Типы узлов могут также содержать узел Group для группы других узлов, узел InkBullet для буллитовых (маркеров абзаца) элементов, узел Row для элементов документа, представленных в строке таблицы, и узел Cell для элементов документа, представленных в ячейке таблицы.

Класс «узел контекста» может также включать в себя свойство, именуемое "GUID Id {get;}", которое является глобально уникальным идентификатором текущего узла контекста. Чтобы можно было осуществлять доступ к нужному узлу контекста, каждый узел контекста в единичном объекте контекста анализа должен иметь уникальный идентификатор. Этот класс также может включать в себя свойство, именуемое "AnalysisRegion Location {get;}", которое идентифицирует место в пространстве документа, где фактически находится соответствующий узел контекста. AnalysisRegion - это двухмерная структура, объединяющая одну или несколько возможно непересекающихся прямоугольникоподобных структур. Этот класс может также включать в себя свойство, именуемое "StrokeCollection Strokes {get;}", которое идентифицирует штрихи рукописи, связанные с соответствующим узлом контекста. Согласно конкретным вариантам осуществления API анализа рукописей позволяет иметь штрихи лишь краевым узлам контекста (как то узлы Word, Drawing и Bullet). Прикладная программа может использовать это свойство для ссылки на штрихи на уровне краевых узлов со стороны всех узлов контекста, являющихся предками (например, корневой узел содержит ссылки на штрихи для всех штрихов в соответствующем объекте контекста анализа).

Кроме того, этот класс может включать в себя свойство, именуемое "ContextNode ParentNode {get;}", которое идентифицирует родительский узел контекста, содержащий соответствующий узел контекста. В конкретных вариантах осуществления узлы контекста всегда создаются, чтобы зависеть от родительского узла контекста, при этом корневой узел контекста является статическим членом объекта контекста анализа. Этот класс может также включать в себя свойство "ContextNode[] SubNodes {get;}", которое идентифицирует все узлы контекста, которые являются прямыми потомками соответствующего узла контекста. Таким образом, это свойство идентифицирует только те дочерние узлы контекста, которые находятся на один уровень ниже в объекте контекста анализа. Например, значение этого свойства для узла контекста «абзац» будет идентифицировать только узлы контекста «строка», содержащиеся в узле «абзац», но не узлы контекста «слово», которые являются дочерними по отношению к узлам контекста «строка».

Этот класс также может включать в себя свойство, именуемое "RecognitionResult RecognitionResult {get;}", которое обеспечивает результат распознавания, вычисляемый соответствующим(и) процессом(ами) анализа распознавания, поскольку RecognitionResult может представлять более одной строки текста на более чем одном языке. RecognitionResult доступно для каждого узла контекста в независимом от документа объекта контекста анализа, хотя свойство RecognitionData, которое задается процессом анализа распознавания и используется для создания объекта RecognitionResult, может быть задано только на одном уровне дерева узлов контекста во избежание дублирования данных. Если с узлом не связано свойство RecognitionData, то он будет либо объединять результаты распознавания всех своих подузлов, либо извлекать результат распознавания из своего родителя. Этот класс может также включать в себя свойство, именуемое "Stream RecognitionData {get; set;}", которое является неизменной формой значения RecognitionResult. Опять же, процесс анализа распознавания создает значение Stream RecognitionData, которое задается на соответствующем узле контекста. Объект RecognitionResult затем строится на основании этого значения.

Класс «узел контекста» может также включать в себя свойство, именуемое "ContextLink[] Links {get;}", которое обеспечивает массив объектов ContextLink. Объект ContextLink описывает альтернативное взаимоотношение двух узлов контекста. Хотя узлы контекста обычно имеют с другими узлами контекста взаимоотношение родитель-потомок, ContextLink допускает альтернативные взаимоотношения между узлами контекста. Например, ContextLink может допускать соединение между двумя узлами контекста, привязку одного узла контекста к другому узлу контекста, заключение одного узла контекста в другом узле контекста или нужный тип связи, заданный прикладной программой. Множественные ContextLink можно добавлять к этому массиву, вызывая метод AddLink. Аналогично, ContextLink можно удалять из этого массива, вызывая метод DeleteLink.

Кроме того, этот класс может включать в себя свойства "IsContainer {get;}" и "IsInkLeaf {get;}". Свойство IsContainer {get;} имеет значение «истина», если соответствующий узел контекста не является краевым узлом контекста (т.е. если соответствующий узел контекста содержит дочерние узлы контекста и, таким образом, считается контейнерным узлом контекста), и имеет значение «ложь» в противном случае. Свойство IsInkLeaf {get;} имеет значение «истина», если текущий узел контекста не является контейнерным узлом контекста, и имеет значение «ложь» в противном случае. Таким образом, если текущий узел контекста не содержит дочерних узлов контекста, он считается краевым узлом контекста. В определенных вариантах осуществления предполагается, что узел контекста InkLeaf содержит ссылки на данные штрихов, тогда как контейнерные узлы контекста не имеют этого ограничения. Контейнерные узлы контекста могут ссылаться, а могут и не ссылаться на данные штрихов, как указано прикладной программой.

Класс «узел контекста» может также содержать свойство "Rect RotatedBoundingBox {get; set;}". Значение этого свойства вычисляется процессом анализа компоновки и классификации. Если данные рукописи, связанные с соответствующим узлом контекста, написаны под углом, то границы для узла контекста будут по-прежнему выровнены горизонтально. Однако значение свойства RotatedBoundingBox будет выровнено в соответствии с углом, под которым были написаны данные рукописи, связанные с соответствующим узлом контекста. Кроме того, этот класс может включать в себя свойство "ReClassifiable {get;}", которое информирует InkAnalyzer, разрешено ли изменять значения соответствующего угла контекста.

Помимо этих свойств, класс «узел контекста» может также включать в себя различные методы. Например, этот класс может включать в себя метод, именуемый "ContextNode CreateSubNode(ContextNodeType type)." Этот метод позволяет создавать дочерний узел контекста конкретного типа. Согласно одному варианту осуществления этот метод может позволять создавать только пригодные дочерние типы соответствующего узла контекста, тем самым предотвращая создание структур данных неправильной формы. Например, этот метод может позволять узлу контекста Line создавать дочерние узлы контекста только InkWord и TextWord. Этот класс может также содержать метод, именуемый "void DeleteSubNode(ContextNode node)", который удаляет указанный дочерний узел контекста из соответствующего объекта контекста анализа. Однако в некоторых вариантах осуществления, если указанный узел контекста все еще содержит штрихи или дочерние узлы контекста, то этот метод завершается неудачно. Кроме того, если указанный узел контекста не является прямым потомком соответствующего узла контекста, то этот метод завершается неудачно. Если прикладная программа реализует свой собственный объект контекста анализа и, в свою очередь, применяет этот метод, то он не удаляет непустые узлы контекста или узлы контекста, которые не являются прямыми потомками соответствующего узла контекста, во избежание неправильно сформированных структур данных в объекте контекста анализа.

Кроме того, этот класс также может включать в себя метод "ContextNode[] HitTestSubNodes(AnalysisRegion region)", который возвращает массив узлов контекста, находящихся в заданной области. Однако возвращаются только непосредственные дочерние узлы этого элемента, а не все потомки. Область задается объектом AnalysisRegion, который может представлять собой коллекцию из одного или нескольких прямоугольников. В конкретных вариантах осуществления, если какая-либо часть местоположения узлов контекста пересекается с заданной областью, то этот узел контекста возвращается в массиве. Этот метод применяется, например, для создания независимого от документа объекта контекста анализа и для согласования результатов анализа с объектом контекста анализа, соответствующим текущему состоянию документа. Таким образом, этот метод часто используется и должен быть оптимизирован для часто повторяющегося доступа со стороны объекта InkAnalyzer.

Класс «узел контекста» может также содержать метод, именуемый "MoveStroke(Stroke stroke, ContextNode destination)". Этот метод перемещает привязку штриха с одного краевого узла контекста на другой. В некоторых вариантах осуществления этот метод используется только между краевыми узлами контекста. Он также может включать в себя метод, именуемый "MoveSubNodeToPosition(int OldIndex, int NewIndex)", который переупорядочивает соответствующий узел контекста по отношению к его «братским» узлам контекста. Например, если документ имеет три слова в строке, например слово 1, слово 2 и слово 3, то их порядок задается массивом подузлов, возвращаемым от родительского узла контекста. Этот метод позволяет изменять их порядок, то есть по отношению к соответствующему родительскому узлу контекста слово 1 задается как последнее слово в строке путем перемещения узла контекста для слова 1 из позиции один в позицию три.

Кроме того, этот класс может включать в себя метод, именуемый "AddLink(ContextLink link)", который добавляет новый объект ContextLink к текущему узлу контекста. В конкретных вариантах осуществления объект ContextLink должен содержать ссылку на соответствующий узел контекста для успешного добавления ContextLink к массиву объектов ContextLink, связанному с соответствующим узлом контекста. Он также может содержать метод, озаглавленный "DeleteLink(ContextLink link)". Этот метод удаляет заданный объект ContextLink из массива объектов ContextLink для соответствующего узла контекста. Согласно одному варианту осуществления вызов этого метода всегда завершается успешно, даже если ContextLink не существует в массиве объектов ContextLink, связанном с соответствующим узлом контекста.

API анализа рукописи может также включать в себя класс «подсказка анализа». Как и многие из вышеописанных классов, класс «подсказка анализа» может включать в себя конструктор, именуемый "AnalysisHint()", который инициализирует объект «подсказка анализа» в пустое состояние. Этот класс также может включать в себя ряд свойств, в том числе свойство, именуемое "AnalysisRegion Location {get;}". Это свойство задает место в документе (как и AnalysisRegion), к которому применим AnalysisHint. Например, если документ представляет собой свободную форму записки с разделом заглавия вверху страницы, то приложение может установить AnalysisHint для области заглавия, чтобы задать то, что в этой области ожидается горизонтальная строка рукописи. Этот AnalysisHint помогает повысить точность процесса анализа.

Этот класс также может включать в себя свойство, именуемое "string Factoid {get; set;}", которое задает конкретный «фактоид», подлежащий использованию для места в документе, к которому применим AnalysisHint. Фактоиды обеспечивают подсказки для процесса распознавания в отношении предполагаемого использования данных рукописи (например, в качестве обычного текста, цифр, почтовых индексов, имен файлов и веб-URL). Этот класс также может включать в себя свойство, именуемое "RecognizerGuide Guide {get; set;}" и "OverrideLanguageId {get; set;}". Свойство "RecognizerGuide Guide {get; set;}" задает руководство по написанию, которое подлежит применению к месту в документе, к которому применим AnalysisHint. Руководства по написанию могут, например, помогать повышать точность процесса анализа распознавателя за счет указания пользователю и информирования процесса анализа распознавателя, где пользователь будет писать строки или символы. Свойство OverrideLanguageId {get; set;} задает подсказку языка для документа, к которому применим AnalysisHint. Задание подсказки языка принуждает объект InkAnalyzer использовать указанный язык вместо языка, заданного на узле контекста.

Этот класс также может включать в себя свойство, именуемое "PrefixText {get; set;}", которое задает текст, который написан или напечатан до строки рукописи, которую нужно распознать. Кроме того, этот класс может включать в себя свойство, именуемое "PrefixText {get; set;}", которое задает конкретный тип режимов, которые должен соблюдать процесс распознавания в том месте документа, к которому применим AnalysisHint. Дополнительно, этот класс может включать в себя свойство, именуемое "SuffixText {get; set;}", которое задает текст, написанный или напечатанный после строки рукописи, подлежащей распознаванию, и свойство, именуемое "WordList WordList {get; set;}", которое задает конкретный набор слов, которые процесс распознавания должен использовать. Списки слов также можно использовать, когда ожидаемые результаты распознавания известны до того, как пользователь действительно напишет входные данные, например список медицинских терминов, наличие которых ожидается в медицинской форме.

Кроме того, этот класс может включать в себя свойство, именуемое "WordMode {get; set}." Если это значение равно «истина», то процесс анализа смещается для возвращения в качестве результата одного слова для всей области анализа. Он также может включать в себя свойство, именуемое "Coerce {get; set}", которое, если «истина», заставляет процесс анализа ограничивать свой результат каким-либо значением фактоида или списка слов, заданным в соответствующей подсказке. Этот класс может также включать в себя свойство, именуемое "AllowPartialDictionaryTerms {get; set}". Если это свойство имеет значение «истина», то процессу анализа распознавания разрешается возвращать части слова из своего словаря распознавания.

В конкретных вариантах осуществления API анализа рукописей может также включать в себя класс «область анализа». Этот класс может включать в себя, например, множественные конструкторы для конструирования объекта AnalysisRegion. Например, он может содержать первый конструктор для построения объекта AnalysisRegion, имеющего любую область, второй конструктор для построения объекта AnalysisRegion на основании параметров двухмерного прямоугольника и третий конструктор для построения объекта AnalysisRegion на основании четырех пространственных координат. Конструктор по умолчанию может, например, создавать пустую область. Этот класс может также включать в себя ряд свойств.

Например, этот класс может включать в себя свойство, именуемое "Rectangle Bounds {get;}", которое извлекает ограничивающий прямоугольник для AnalysisRegion, свойство, именуемое "IsEmpty {get;}", которое указывает, имеет ли соответствующий объект AnalysisRegion пустую внутреннюю область, и свойство, именуемое "IsInfinite {get;}", которое указывает, установлен ли соответствующий AnalysisRegion на бесконечность или нет.

Этот класс также может включать в себя ряд методов, например метод, именуемый "AnalysisRegion Clone()", который клонирует соответствующий объект AnalysisRegion. Этот класс может также включать в себя метод, именуемый "Equals(AnalysisRegion otherRegion)", который проверяет, идентичен ли указанный объект AnalysisRegion (именуемый otherRegion) соответствующему объекту AnalysisRegion. Этот метод возвращает значение «истина», если внутренняя область указанного объекта AnalysisRegion идентична внутренней области соответствующего объекта AnalysisRegion, а в противном случае возвращает значение «ложь».

Этот класс также может содержать метод "Intersect(AnalysisRegion regionToIntersect)", который обрезает соответствующий объект AnalysisRegion до указанной области анализа. Таким образом, полученный объект AnalysisRegion будет включать в себя только области, перекрываемые или пересекаемые указанной областью анализа. Этот класс также может включать в себя метод, именуемый "Intersect(Rectangle rectangle)," который обрезает соответствующий объект AnalysisRegion до указанного прямоугольника. Опять же, полученный объект AnalysisRegion будет включать в себя только области, перекрываемые или пересекаемые указанным прямоугольником. Он также может включать в себя метод, именуемый "MakeEmpty()", который инициализирует соответствующий объект AnalysisRegion на пустую внутреннюю область, и метод, именуемый "MakeInfinite()", который задает область, занимаемую соответствующим объектом AnalysisRegion, бесконечно большой. Он также может включать в себя различные методы объединения или разделения по-разному определенных областей, например метод, именуемый "Union(AnalysisRegion regionToUnion)", который задает присоединение или добавление объекта AnalysisRegion к соответствующему объекту AnalysisRegion, и метод, именуемый "Union(Rectangle rectangle)", который объединяет указанный прямоугольник с соответствующим объектом AnalysisRegion. С помощью этого метода прямоугольник можно задать посредством координатного пространства для соответствующего объекта AnalysisRegion. Конечно, этот класс может включать в себя многие другие методы для комбинирования областей или исключения одной области из другой на основании нужного определения областей.

API анализа рукописи может также иметь класс «результат распознавания». Как и многие из ранее рассмотренных классов, класс «результат распознавания» может включать в себя один или несколько конструкторов. Например, этот класс может включать в себя конструктор, именуемый "RecognitionResult(Stream lattice)", который строит объект RecognitionResults из данной решетки распознавания. В конкретных вариантах осуществления решетка распознавания является сериализованной формой результатов процесса распознавания. Этот метод может, например, задавать решетку распознавания как массив байтов, подлежащий использованию для построения соответствующего объекта RecognitionResult. Он также может включать в себя конструктор, именуемый "RecognitionResult(ContextNode node)", который строит объект RecognitionResults из данного узла контекста. Он также может включать в себя конструктор, именуемый "RecognitionResult(string Text, int StrokeCount)", который строит объект RecognitionResults из заданного значения текста, которое, в свою очередь, связано с заданным количеством штрихов и может использоваться для коррекции, если процесс распознавания не происходит с альтернативным значением распознавания, соответствующим фактическим рукописным данным рукописи. Кроме того, этот класс может включать в себя конструктор, именуемый "RecognitionResult(RecognitionResult leftRecognitionResult, RecognitionResult rightRecognitionResult)", который строит объект RecognitionResults путем слияния двух существующих объектов RecognitionResults друг с другом.

Класс «результат распознавания» может также включать в себя одно или несколько свойств, например свойство, именуемое "StrokeCollection StrokeCollection {get;}", которое обеспечивает массив индексов штрихов, представляющий коллекцию штрихов, которые содержатся в одном объекте рукописи, и свойство, именуемое "RecognitionAlternate TopAlternate {get;}", которое обеспечивает наилучшую альтернативу результата распознавания. Этот класс может также включать в себя свойство, именуемое "RecognitionConfidence RecognitionConfidence {get;}", которое обеспечивает уровень доверительности (например, высокий, средний или низкий) наилучшего альтернативного выделения для текущих результатов из процесса анализа распознавания, и свойство, именованное "string TopString {get;}", которое возвращает строку наилучшего результата для результатов анализа из процесса анализа распознавания.

Класс «результаты распознавания» также может включать в себя ряд методов, например метод, именуемый "public RecognitionAlternateCollection GetAlternateCollectionFromSelection (selectionStart, selectionLength, maximumAlternates)", который задает коллекцию альтернатив из выделения в строке наилучшего результата для результатов анализа из процесса анализа распознавания, где каждая альтернатива соответствует только одному сегменту рукописи. Выходные параметры этого метода могут включать в себя, например, значение, которое задает начало выделения текста, из которого возвращается коллекция альтернатив, значение, которое задает длину выделения текста, из которого возвращается коллекция альтернатив, и значение, которое задает максимальное количество альтернатив, подлежащих возвращению. Этот метод может затем возвратить коллекцию RecognitionAlternateCollection альтернатив из выделения в строке наилучшего результата для результата распознавания.

Класс «результаты распознавания» может дополнительно включать в себя метод, именуемый "RecognitionResult Merge(RecognitionResult left, string separator, RecognitionResult right)". Этот метод можно использовать для создания нового объекта RecognitionResult из единичной строки, результирующей в плоской решетке, для присоединения единичной строки к началу или концу существующего объекта RecognitionResult или для связывания единой строки между двумя существующими объектами RecognitionResult. Этот класс может также включать в себя метод, именуемый "Modify TopAlternate(RecognitionAlternate alternate)", который задает результат распознавания, подлежащий изменению известной альтернативой. Согласно некоторым вариантам осуществления по умолчанию строка наилучшего результата для результатов процесса анализа распознавания соответствует наилучшей альтернативе. Однако этот метод можно использовать для указания, что в результатах процесса анализа распознавания используются альтернативы, отличные от наилучшей альтернативы. Если новая наилучшая альтернатива приводит к другой сегментации, чем предыдущая, то метод ModifyTopAlternate будет автоматически обновлять узлы контекста, чтобы отражать изменения. Для извлечения альтернатив, которые можно использовать для изменения результата распознавания, этот метод вызывает метод GetAlternatesFromSelection. Этот класс также может иметь метод, именуемый "Stream Save()", которые постоянно поддерживает соответствующий объект RecognitionResults в виде решетки распознавания. Решетка распознавания является сериализованным форматом, используемым для выражения результатов из процесса распознавания.

API анализа рукописи может также иметь нумерованный тип Analysis Options. Этот тип может содержать одно из двух полей, которые задают то, как процесс анализа проанализирует данные рукописи, например поле, именуемое "const AnalysisOptions Default", которое разрешает все доступные опции процесса анализа. Это поле может, например, разрешать распознавание текста, использование таблиц, использование списков, использование примечаний, использование соединителей и контейнеров и использование альтернативных результатов. Этот тип также может включать в себя поле, именуемое "const AnalysisOptions EnableAnnotations", которое разрешает и запрещает обнаружение примечаний, поле, именуемое "const AnalysisOptions EnableConnectorsAndContainers", которое разрешает и запрещает обнаружение соединителей и контейнеров, и поле, именуемое "const AnalysisOptions EnableIntermediateResults", которое разрешает и запрещает возвращение результатов анализа прикладной программе между использованием разных следующих друг за другом процессов анализа (например, между процессом разбора и следующим процессом разбора). Этот тип может также иметь поле, именуемое "const AnalysisOptions EnableLists", которое разрешает и запрещает обнаружение списков, и поле, именуемое "const AnalysisOptions EnableTables", которое разрешает и запрещает обнаружение таблиц. Этот перечислительный тип может дополнительно включать в себя поле, именуемое "const AnalysisOptions EnableTextRecognition", которое разрешает и запрещает процесс анализа распознавания текста. Однако при наличии дополнительных процессов анализа (или других версий одного и того же процесса анализа), этот тип может соответственно включать в себя дополнительные опции анализа.

Кроме того, API анализа рукописей может включать в себя класс AnalysisResultsEventArgs. Этот класс может иметь конструктор, именуемый "public AnalysisResultsEventArgs()", который создает структуру данных, которая содержит результаты анализа и возвращается прикладной программе, при инициировании события AnalysisResults. Этот класс может также включать в себя свойство, именуемое "InkAnalyzer InkAnalyzer {get;}", которое идентифицирует объект InkAnalyzer, осуществляющий процесс анализа.

API может также иметь класс Line, который может быть полезен для некоторых типов операционных систем, которые распознают использование объекта "Line", представляющего геометрическую линию. Этот класс может включать в себя конструктор, например конструктор, именуемый "public Line(Point beginPoint, Point endPoint)", который создает объект Line. Этот класс может также включать в себя различные свойства, например свойство, именуемое "public Point BeginPoint {get; set;}", которое представляет начальную точку объекта линии, и свойство, именуемое "public Point EndPoint {get; set;}", которое представляет конечную точку объекта линии.

Помимо этих классов, API анализа рукописей может также содержать класс «альтернативное распознавание». Этот класс может включать в себя элементы, представляющие возможные совпадения слов для сегментов рукописей, которые сравниваются со словарем распознавателя. Например, этот класс может включать в себя свойство, именуемое "Line Ascender {get;}", которое обеспечивает надстрочную линию объекта RecognitionAlternate, которая существует на одной строке (с линией, представленной двумя точками), свойство, именуемое "public Line Baseline {get;}", которое обеспечивает основную линию объекта RecognitionAlternate, которая существует на одной строке, и свойство, именуемое "Line Descender {get;}", которое обеспечивает подстрочную линию объекта RecognitionAlternate, которая существует на одной строке. Этот класс может также включать в себя свойство, именуемое "RecognitionResult Extract {get;}", которое обеспечивает объект RecognitionResults для текущего объекта RecognitionAltemate. Это свойство можно использовать, например, для извлечения объекта RecognitionResult для слова из объекта RecognitionResult для строки, содержащей это слово.

Он также может включать в себя свойство, именуемое "Line Midline {get;}", которое обеспечивает среднюю линию для объекта RecognitionAlternate, которая существует на одной строке, свойство, именуемое "StrokeCollection Strokes {get;}", которое обеспечивает коллекцию штрихов, содержащихся в объекте рукописи (т.е. обеспечивает StrokeCollection, представляющий штрихи, связанные с RecognitionResult), и свойство, именуемое "StrokeCollection[] StrokesArray {get;}", которое обеспечивает коллекцию штрихов, содержащихся в одном или нескольких объектах рукописи, представляющую штрихи, связанные с RecognitionResult. Этот класс также может включать в себя свойство, именуемое "RecognitionConfidence RecognitionConfidence {get;}", которое обеспечивает уровень доверительности (например, высокий, средний и низкий), который процесс анализа распознавания определил при распознавании объекта RecognitionAlternate или жеста. Для нестрочных узлов возвращается низшая RecognitionConfidence потомков соответствующих узлов контекста. Он также может содержать свойство, именуемое "string RecognizedString {get;}", которое задает результирующую строку альтернативы. Таким образом, для любого узла контекста над узлом контекста слов строка результатов объединяется этим методом. Например, узел строки будет содержать строку результатов, которая, в свою очередь, содержит результаты всех его потомков или узлов слова. Узел абзаца будет содержать строку результатов, которая содержит результаты всех его потомков или узлов строк.

Класс «альтернативное распознавание» может также содержать один или несколько методов, включая, например, метод, именуемый "StrokeCollection[] GetStrokesArrayFromTextRange(int selectionstart, int selectionlength)", который задает StrokeCollection для каждого объекта рукописи, который соответствует известному диапазону текста. Этот класс также может содержать метод, именуемый "StrokeCollection[] GetStrokesFromStrokesArrayRanges(StrokeCollection[] strokesArray)", который задает наименьшую коллекцию штрихов, которая содержит известную входную коллекцию штрихов и для которой распознаватель может обеспечить альтернативы. В частности, штрихи возвращаются массивом объектов рукописи, каждый из которых содержит массив индексов штрихов для коллекции. Коллекция штрихов рукописи, возвращаемая этим методом, может совпадать со входной коллекцией или может быть больше, если входная коллекция совпадает только с частью наименьшего результата распознавания, которая включает в себя все входные штрихи. Этот класс может дополнительно включать в себя метод, именуемый "StrokeCollection GetStrokesFromStrokesRanges(StrokeCollection strokes)", который задает наименьшую коллекцию штрихов, которая содержит известную входную коллекцию штрихов и для которой распознаватель может обеспечить альтернативы, и метод, именуемый "StrokeCollection GetStrokesFromTextRange(int selectionstart, int selectionlength)", который задает StrokeCollection, который соответствует известному диапазону текста.

Этот класс может дополнительно включать в себя метод, именуемый "void GetTextRangeFromStrokes(ref int selectionstart, ref int selectionend, StrokeCollection strokes)", который задает наименьший диапазон распознанного текста, для которого распознаватель может возвратить альтернативу, которая содержит известный набор штрихов, и метод, именуемый "void GetTextRangeFromStrokesArray(ref int selectionstart, ref int selectionend, StrokeCollection[] strokesarray)", который задает наименьший диапазон распознанного текста, для которого распознаватель может возвращать альтернативу, которая содержит известный набор штрихов. От также может иметь метод, именуемый "RecognitionAlternateCollection SplitWithConstantPropertyValue(GUID property Type)", который возвращает коллекцию альтернатив, которые являются подразделением альтернативы, в отношении которой вызывается этот метод. Каждая альтернатива в коллекции содержит соседние сегменты распознавания, которые имеют то же самое значение свойства для свойства, передаваемое методу. Например, этот метод можно использовать для получения альтернатив, которые делят исходную альтернативу по границам уровня доверительности (высокий, средний или низкий) в результате распознавания, границам строк или границам сегментов. Он также может включать в себя метод, именуемый "byte[] GetPropertyValue(GUID property Type)", который задает значение известного свойства альтернативы, например доверительность распознавателя в альтернативе. Однако не весь процесс анализа распознавания обеспечивает значение для всех типов свойств. Таким образом, этот способ обеспечивает данные для типов, поддерживаемых соответствующим процессом анализа распознавания.

API анализа рукописи может также включать в себя класс «коллекция альтернатив распознавания». Как и многие из рассмотренных выше классов, этот класс может включать в себя конструктор, именуемый "RecognitionAlternateCollection()", для создания объекта RecognitionAlternateCollection. Этот класс также может включать в себя ряд свойств, например свойство, именуемое "Count {get;}", которое обеспечивает количество объектов или соединителей, содержащихся в коллекции альтернативных значений распознавания, свойство, именуемое "IsSynchronized {get;}", которое обеспечивает значение, указывающее, синхронизирован ли доступ к коллекции альтернативных значений распознавания с прикладной программой (т.е. «сохранность нити»), и свойство, именуемое "SyncRoot {get;}", которое обеспечивает объект, который можно использовать для синхронизации доступа к коллекции альтернативных значений распознавания.

Этот класс также может содержать один или несколько методов, например метод, именуемый "virtual void CopyTo(Array array, int index)", который копирует все элементы текущей коллекции альтернативных значений распознавания в заданный одномерный массив, начиная с заданного индекса массива назначения, и метод, именуемый "IEnumerator IEnumerable.GetEnumerator()", который является стандартным перечислением IEnumerable, которое позволяет вызывающим использовать каждую конструкцию для перечисления по каждому RecognitionAlternate в коллекции альтернативных значений распознавания. Этот класс также может включать в себя метод, именуемый "RecognitionAlternateCollectionEnumerator GetEnumerator()", который возвращает RecognitionAlternateCollectionEnumerator, который содержит все объекты в коллекции альтернативных значений распознавания. Этот метод можно использовать, например, для извлечения каждого объекта в коллекции альтернативных значений распознавания.

API анализа рукописей может дополнительно включать в себя перечисление «доверительность распознавания» и перечисление «режим распознавания», каждый из которых может содержать одно или несколько полей, относящихся к процессу анализа распознавания. Например, класс «доверительность распознавания» может содержать множественные поля, например поле, именуемое "Intermediate", указывающее, что процесс анализа распознавания «уверен», что правильный результат находится в списке обеспеченных значений распознавания, поле, именуемое "Poor", которое указывает, что анализ распознавания «не уверен», что правильный результат находится в списке обеспеченных значений распознавания, и поле "Strong", указывающее, что процесс анализа распознавания «уверен», что наилучшее значение в альтернативных значениях распознавания верно.

Аналогично, класс «режим распознавания» может включать в себя поля, которые задают, как процесс анализа распознавания интерпретирует данные электронной рукописи и, таким образом, определяет строку результата распознавания. Например, этот класс может включать в себя поле, именуемое "Coerce", которое указывает, что процесс анализа распознавания «сдерживает» (ограничивает) результат распознавания на основании фактоида, заданного для контекста, и поле, именуемое "Line", которое указывает, что процесс анализа распознавания обрабатывает данные электронной рукописи как одну строку. Этот класс также может включать в себя поле, именуемое "None", которое указывает, что процесс анализа распознавания не применяет режимы распознавания, и поле, именуемое "Segment", которое указывает, что процесс анализа распознавания обрабатывает данные электронной рукописи как образующие одно слово или символ. Кроме того, этот класс может включать в себя поле, именуемое "TopInkBreaksOnly", которое запрещает множественную сегментацию.

Кроме того, API «анализ рукописей» может включать в себя класс «связь контекста», который определяет, как связаны друг с другом два узла контекста. Объект ContextLink сам по себе представляет, какие два узла контекста связаны друг с другом, направление связи и тип связи. Этот класс может включать в себя свойство, именуемое "ContextNode SourceNode{get;}", которое задает исходный узел контекста, который связан с другим узлом контекста, свойство, именуемое "ContextLinkType LinkType{get;}", которое задает тип отношения связи, которое существует между исходным и конечным узлами контекста, и свойство, именуемое "CustomLinkType{get;}", которое указывает, что используется специализированная связь. Эта ситуация может иметь место, когда приложение решает использовать систему связи API анализатора рукописей, чтобы представить связи, зависящие от приложения, за пределами того, что может распознать API.

Этот класс может также включать в себя свойство, именуемое "ContextNode DestinationNode {get;}", которое задает конечный узел контекста (узел назначения), связанный с другим узлом контекста. Для этого класса может быть два доступных конструктора, которые создают взаимоотношение между исходным и конечным узлами контекста.

Этот класс может также включать в себя перечисление, именуемое "ContextLinkType enum", которое задает тип отношения, совместно используемого двумя узлами контекста. Эти различные типы связи могут включать в себя, например, тип "AnchorsTo", который описывает, что один узел «привязан» к другому узлу. Оба узла могут использовать свойство SourceNode или DestinationNode в зависимости от ситуации разбора. Типы связи могут также включать в себя тип "Contains", который описывает, что один узел содержит другой узел. При таком взаимоотношении содержащий узел может именоваться SourceNode, а содержимый узел может именоваться DestinationNode. Типы связи могут также включать в себя тип "PointsTo", который описывает, что один узел указывает на другой узел. Для этого взаимоотношения указывающий узел может именоваться SourceNode, а указуемый узел может именоваться DestinationNode. Кроме того, типы связи могут также включать в себя тип "PointsFrom", который описывает, что один узел указывается из другого узла. Для этого взаимоотношения узел, из которого исходит указание, может именоваться SourceNode, а узел, на который указывают, может именоваться DestinationNode.

Типы связи могут также включать в себя тип "SpansHorizontally", который описывает, что один узел находится на расстоянии от другого узла по горизонтали, и тип "Spans Vertically", который описывает, что один узел находится на расстоянии от другого узла по вертикали. Для этих типов узел, покрывающий другой узел (зачеркивание, подчеркивание, граничная полоска), обычно записываемый последним, можно именовать SourceNode, а узел, по которому проходят (накрываемый), можно именовать DestinationNode. Типы связей могут также включать в себя тип “Custom”, который описывает, что использован специализированный тип связи. При использовании этого значения свойство "CustomLinkType" на объекте ContextLink может обеспечивать более подробную информацию о назначении этой связи.

Модель приложения

Клиент Windows объединяет характеристики сети Web с характеристиками традиционных настольных приложений. Модель приложения обеспечивает инфраструктуру для защищенных приложений и упрощает разработку, развертывание и обслуживание клиентских приложений. Эта инфраструктура обеспечивает простое и понятное применение. Например, локальные приложения могут использовать привычные браузероподобные особенности независимо от того, хостировано ли приложение в браузере, или является самостоятельным приложением, при этом сохраняя выгоды выполнения на локальном клиенте. Эта инфраструктура позволяет пользователям совершать привычные действия, как при работе в Web, тем самым увеличивая уровень комфорта для пользователя и уменьшая время, необходимое для изучения нового приложения. Модель приложения является частью пространства имен System.Windows.

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

Приложения, использующие модель приложения, выполняются локально на клиентской системе независимо от того, находится ли клиентская система в онлайновом (т.е. активно подключена к Web) или автономном режиме (т.е. не подключена к Web). Это позволяет приложению обеспечивать более высокую производительность, чем у приложения на основе сервера, которое нуждается в активном подключении к Web и непрерывно обменивается данными с сервером посредством Web. После установки приложения на клиентской системе можно осуществлять доступ к приложению из меню "Start" (как для традиционного настольного приложения) или путем навигации к приложению (как для веб-приложения). Модель приложения содержит три основные части: управление жизненным циклом приложения, инфраструктуру приложения и инфраструктуру навигации.

Модель приложения поддерживает два разных типа приложений: «онлайновое приложение» и «управляемое приложение». Приложения, использующие модель приложения, могут выполняться в браузере или отдельном окне верхнего уровня. «Онлайновое приложение» - это приложение, которое выполняется из сервера и хостируется в браузере. Приложение можно кэшировать для автономного доступа, или приложению могут требоваться определенные онлайновые (оперативные) ресурсы для правильной работы. «Управляемое приложение» доступно в автономном режиме и установлено на клиенте. Управляемое приложение обслуживается операционной системой. Вход в управляемое приложение можно добавить в меню "Start" на клиенте. Приложения могут загружаться постепенно, чтобы пользователь мог начать взаимодействовать с приложением, пока оно находится в стадии загрузки, не откладывая взаимодействие до окончания процесса установки.

С приложениями связан манифест приложения, который описывает зависимости приложения, например дополнительные библиотеки и ресурсы, необходимые для выполнения приложения. Инсталлятор использует манифест для управления загрузкой и установкой приложения. В качестве части процесса установки вызывается «менеджер доверия». Менеджер доверия использует манифест приложения, чтобы определить, какие разрешения необходимы для выполнения приложения. Манифест приложения также задает информацию оболочки, например файловые связи и добавлять ли вход в меню "Start", а также иконку и текст для входа.

Приложения, использующие модель приложения, включают в себя разметку, код, ресурсы и манифест. Приложение задано и ограничено своим объектом приложения, который является глобальным объектом, который сохраняется в памяти на протяжении времени жизни каждого сеанса приложения. Объекту приложения известны все ресурсы, принадлежащие приложению, и он обеспечивает границу между собой и другими приложениями или внешними ресурсами. Инфраструктура приложения использует объект приложения для идентификации, ссылки и связи с приложением. Объект приложения также используется в приложении для управления окнами и ресурсами, задания поведения при запуске и отключении, обработки настроек конфигурации, задания визуальных стилей для приложения, совместного использования кода, состояния и ресурсов по навигациям и обработки событий в масштабе приложения.

Инфраструктура навигации поддерживает приложения на основе навигации, которые используют знакомство пользователей с действиями навигации и работой с журналом в Web для обеспечения более привычной, понятной работы пользователя на клиентской системе, независимо от того, размещено ли приложение в системном браузере или в отдельном окне верхнего уровня. Работа с журналом - это процесс, используемый инфраструктурой навигации для прослеживания истории навигации. Журнал позволяет пользователям повторно совершать шаги назад и вперед в линейной последовательности навигации. Независимо от того, размещена ли служба навигации в браузере или в отдельном окне навигации, каждая навигация сохраняется в журнале и допускает повторное обращение в линейной последовательности с использованием кнопок «вперед» и «назад» или путем вызова методов «переход вперед» и «переход назад». С каждым окном навигации связан журнал.

Класс «навигационное приложение» упрощает задачу создания приложений на основе навигации благодаря обеспечению свойств и событий, относящихся к навигации. Класс «навигационное приложение» содержит свойство запуска, которое указывает страницу или элемент, к которой(ому) переходит система при первом запуске приложения. Этот класс также имеет коллекцию свойств, которая позволяет разработчику приложений совместно использовать глобальную информацию состояния по страницам без необходимости в разбиении приложения на подклассы, и поддерживает привязку данных к этим свойствам.

Иллюстративная вычислительная система и среда

На фиг.4 показан пример подходящей среды 100 вычислительной среды 400, в которой можно (полностью или частично) реализовать программную инфраструктуру 132. Вычислительная среда 400 может использоваться в описанных здесь компьютерных и сетевых архитектурах.

Иллюстративная вычислительная среда 400 является всего лишь примером подходящей вычислительной среды и не призвана как-либо ограничивать объем использования или функциональные возможности компьютерных и сетевых архитектур. Также вычислительную среду 400 не следует рассматривать как имеющую какую-либо зависимость или требование в отношении к какому-либо одному компоненту, проиллюстрированному в иллюстративной вычислительной среде 400.

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

Инфраструктуру 132 можно описать в общем контексте компьютерно-выполняемых инструкций, например программных модулей, выполняемых компьютером. В общем случае программные модули включают в себя процедуры, программы, объекты, компоненты, структуры данных и т.п., которые выполняют конкретные задания или реализуют определенные абстрактные типы данных. Инфраструктуру 132 также можно применять на практике в распределенных вычислительных средах, где задания выполняются удаленными обрабатывающими устройствами, связанными посредством сети связи. В распределенной вычислительной среде программные модули могут размещаться как на локальных, так и на удаленных компьютерных носителях данных, включая запоминающие устройства.

Вычислительная среда 400 включает в себя вычислительное устройство общего назначения в виде компьютера 402. Компоненты компьютера 402 могут включать в себя, но не исключительно, один или несколько процессоров или блоков обработки 404, системную память 406 и системную шину 408, которая подключает различные компоненты системы, включая процессор 404, к системной памяти 406.

Системная шина 408 может относиться к любому из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, с использованием разнообразных шинных архитектур. В порядке примера, но не ограничения, такие архитектуры включают в себя шину архитектуры промышленного стандарта (ISA), шину микроканальной архитектуры (MCA), шину расширенного стандарта ISA (EISA), локальную шину Ассоциации по стандартам в области видеоэлектроники (VESA) и шину подключений периферийных компонентов (PCI), также именуемую шиной расширения.

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

Системная память 406 содержит компьютерные носители данных в виде энергозависимой и/или энергонезависимой памяти, например оперативной памяти (ОЗУ) 410, и/или энергонезависимой памяти, например постоянной памяти (ПЗУ) 412. Базовая система ввода/вывода (BIOS) 414, содержащая основные процедуры, которые помогают передавать информацию между элементами компьютера 402, например, при запуске, хранится в ПЗУ 412. ОЗУ 410 обычно содержит данные и/или программные модули, которые непосредственно доступны процессору 404 и/или в данный момент обрабатываются им.

Компьютер 402 может также включать в себя другие сменные/стационарные, энергозависимые/энергонезависимые компьютерные носители данных. В порядке примера, на фиг.4 показан жесткий диск 416, который производит считывание со стационарного энергонезависимого магнитного носителя (не показан) и запись на него, привод 418 магнитного диска, который производит считывание со сменного энергонезависимого магнитного диска 420 (например, флоппи-диска) и запись на него, и привод 422 оптического диска, который производит считывание со сменного энергонезависимого оптического диска 424, например CD-ROM, DVD-ROM или другого оптического носителя, и запись на него. Привод 416 жесткого диска, привод 418 магнитного диска и привод 422 оптического диска подключены к системной шине 408 посредством одного или нескольких интерфейсов 426 носителей данных. Альтернативно, привод 416 жесткого диска, привод 418 магнитного диска и привод 422 оптического диска могут быть подключены к системной шине 408 посредством одного или нескольких интерфейсов (не показаны).

Дисководы и соответствующие считываемые компьютером носители обеспечивают хранение считываемых компьютером команд, структур данных, программных модулей и других данных для компьютера 402. Хотя пример иллюстрирует жесткий диск 416, сменный магнитный диск 420 и сменный оптический диск 424, очевидно, что для реализации иллюстративной вычислительной системы и среды можно также использовать другие типы считываемых компьютером носителей, в которых можно хранить данные, доступные компьютеру, например магнитные кассеты или другие магнитные запоминающие устройства, карты флэш-памяти, CD-ROM, цифровые универсальные диски (DVD) или другие оптические носители данных, оперативную память (ОЗУ), постоянную память (ПЗУ), электрически стираемую программируемую постоянную память (ЭСППЗУ) и т.п.

На жестком диске 416, магнитном диске 420, оптическом диске 424, ПЗУ 412 и/или ОЗУ 410 может храниться любое количество программных модулей, включая, например, операционную систему 426, одну или несколько прикладных программ 428, другие программные модули 430 и программные данные 432. Каждая из операционной системы 426, одной или несколько прикладных программ 428, других программных модулей 430 и программных данных 432 (или некоторая их комбинация) может включать в себя элементы программной инфраструктуры 132.

Пользователь может вводить команды и информацию в компьютер 402 через устройства ввода, например клавиатуру 434 и указательное устройство 436 (например, «мышь»). Другие устройства ввода 438 (не показаны) могут включать в себя микрофон, джойстик, игровую панель, спутниковую антенну, последовательный порт, сканер и/или т.п. Эти и другие устройства ввода подключены к блоку обработки 404 через интерфейсы 440 ввода/вывода, которые подключен к системной шине 408, но могут быть подключены посредством других структур интерфейса и шины, например, параллельного порта, игрового порта или универсальной последовательной шины (USB).

Монитор 442 или устройство отображения другого типа может также быть подключен к системной шине 408 через интерфейс, например видеоадаптер 444. Помимо монитора 442, другие периферийные устройства вывода могут включать в себя такие компоненты, как громкоговорители (не показаны) и принтер 446, которые могут быть подключены к компьютеру 402 через интерфейсы 440 ввода/вывода.

Компьютер 402 может работать в сетевой среде с использованием логических соединений с одним или несколькими удаленными компьютерами, например удаленным вычислительным устройством 448. Например, удаленное вычислительное устройство 448 может представлять собой персональный компьютер, портативный компьютер, сервер, маршрутизатор, сетевой компьютер, равноправное устройство или другой общий сетевой узел, игровую приставку и т.п. Удаленное вычислительное устройство 448 показано в виде портативного компьютера, который может содержать многие или все элементы, описанные здесь применительно к компьютеру 402.

Логические соединения между компьютером 402 и удаленным компьютером 448 представлены в виде локальной сети (ЛС) 450 и глобальной сети (ГС) 452. Такие сетевые среды обычно используются в офисных, производственных компьютерных сетях, интрасетях и в Интернет.

При использовании в сетевой среде ЛС компьютер 402 подключен к локальной сети 450 через сетевой интерфейс или адаптер 454. При использовании в сетевой среде ГС компьютер 402 обычно содержит модем 456 или другие средства установления соединений по глобальной сети 452. Модем 456, который может быть внутренним или внешним по отношению к компьютеру 402, может быть подключен к системной шине 408 через интерфейсы 440 ввода/вывода или другие соответствующие механизмы. Очевидно, что показанные сетевые соединения являются иллюстративными и что можно использовать другие средства установления линии(й) связи между компьютерами 402 и 448.

В сетевой среде, например проиллюстрированной вычислительной среде 400, программные модули, указанные в отношении компьютера 402, или часть из них могут храниться в удаленном запоминающем устройстве. В порядке примера, удаленные прикладные программы 458 размещены в запоминающем устройстве на удаленном компьютере 448. Очевидно, что показанные сетевые соединения являются иллюстративными и что можно использовать другие средства установления линии(й) связи между компьютерами. В иллюстративных целях прикладные программы и другие выполнимые программные компоненты, например операционная система, показаны здесь в виде отдельных блоков, хотя очевидно, что такие программы и компоненты в разное время размещаются в разных запоминающих компонентах вычислительного устройства 402 и выполняются процессором(ами) данных компьютера.

Реализация инфраструктуры 132 и, в частности, API 142 или вызовов, адресованных API 142, может храниться или передаваться посредством того или иного вида считываемого компьютером носителя. Считываемый компьютером носитель может представлять собой любой имеющийся носитель, к которому компьютер может осуществлять доступ. В порядке примера, но не ограничения, считываемый компьютером носитель может представлять собой «компьютерный носитель данных» или «среду передачи данных». Компьютерные носители данных включают в себя энергозависимые и энергонезависимые, сменные и стационарные носители, реализованные посредством любого способа или технологии для хранения информации, например, считываемых компьютером команд, структур данных, программных модулей или других данных. Компьютерные носители данных включают в себя, но не исключительно, ОЗУ, ПЗУ, ЭСППЗУ, флэш-память или другую технологию памяти, CD-ROM, цифровые универсальные диски (DVD) или иные оптические носители данных, магнитные кассеты, магнитную ленту, магнитные дисковые носители данных или иные магнитные запоминающие устройства или любой другой носитель, который можно использовать для хранения полезной информации и к которому компьютер может осуществлять доступ.

Среды передачи данных обычно воплощают считываемые компьютером команды, структуры данных, программные модули или другие данные в виде модулированного сигнала данных, например несущей волны или иного транспортного механизма. Среды передачи данных также включают в себя любые среды доставки информации. Термин «модулированный сигнал данных» означает сигнал, одна или несколько характеристик которого изменяется так, чтобы кодировать информацию в сигнале. В порядке примера, но не ограничения, среды передачи данных содержат проводные среды, например проводную сеть или прямое проводное соединение, и беспроводные среды, например акустические, РЧ, инфракрасные и другие беспроводные среды. В число считываемых компьютером сред входят также комбинации любых из вышеперечисленных позиций.

Альтернативно, части структуры могут быть реализованы аппаратными средствами или посредством комбинации аппаратных, программных и программно-аппаратных средств. Например, для реализации одной или нескольких частей структуры можно разработать одну или несколько специализированных интегральных схем (СИС) или программируемых логических устройств (ПЛУ).

Теоретически, программный интерфейс можно рассматривать обобщенно, как показано на фиг.5 или фиг.6. На фиг.5 показан интерфейс Интерфейс 1, служащий каналом связи между первым и вторым сегментами кода. На фиг.6 показан интерфейс, содержащий интерфейсные объекты I1 и I2 (которые могут быть или не быть частью первого и второго сегментов кода), которые позволяют первому и второму сегментам кода связываться посредством носителя М. Согласно фиг.6, интерфейсные объекты I1 и I2 можно рассматривать как отдельные объекты одной системы, а также можно считать, что объекты I1 и I2 плюс носитель М образуют интерфейс. Хотя на фиг.5 и 6 показаны двусторонний поток и интерфейсы по обе стороны потока, некоторые реализации могут обеспечивать только один информационный поток в одном направлении (или ни одного информационного потока, как описано ниже) или интерфейсный объект с одной стороны. В порядке примера, но не ограничения, определение программного интерфейса охватывает такие термины, как программный интерфейс приложения (API), точка ввода, метод, функция, подпрограмма, вызов удаленной процедуры и интерфейс объектной модели компонентов (COM).

Аспекты такого программного интерфейса могут включать в себя метод, посредством которого первый сегмент кода передает информацию (где термин «информация» используется в самом широком смысле и включает в себя данные, команды, запросы и т.д.) второму сегменту кода; метод, посредством которого второй сегмент кода принимает информацию; и структуру, последовательность, синтаксис, организацию, схему, хронирование и содержимое информации. В этой связи сам по себе нижележащий транспортный носитель может быть не важен для действия интерфейса, является ли носитель проводным, или беспроводным, или комбинированным, при условии, что информация переносится так, как определено интерфейсом. В некоторых случаях информация может не передаваться в одном или обоих направлениях в традиционном смысле, поскольку перенос информации может либо осуществляться другим механизмом (например, информация может помещаться в буфер, файл и т.п., отдельный от информационного потока, между сегментами кода), либо не существовать, как в случае, когда один сегмент кода просто обращается к функции, осуществляемой вторым сегментом кода. Некоторые или все эти аспекты могут быть важны в данном случае, например, в зависимости от того, являются ли сегменты кода частью системы в свободно связанной или тесно связанной конфигурации, и поэтому этот список следует рассматривать в порядке иллюстрации, но не ограничения.

Это определение программного интерфейса известно специалистам в данной области и явствует из вышеприведенного подробного описания изобретения. Существуют, однако, другие пути реализации программного интерфейса, и, если явно не указано обратное, их также следует рассматривать в объеме формулы изобретения, приведенного в конце этого описания изобретения. Такие другие пути могут оказаться более изощренными или сложными, чем упрощенный вид на фиг.5 и 6, но они, тем не менее, выполняют аналогичную функцию для достижения, в принципе, того же результата. Теперь кратко опишем некоторые иллюстративные альтернативные реализации программного интерфейса.

А. Разложение

Передача информации от одного сегмента кода к другому может осуществляться косвенно, путем разбиения коммуникации (информации) на множество дискретных коммуникаций. Это схематически представлено на фиг.7 и 8. Там показано, что некоторые интерфейсы можно описывать в терминах делимых множеств функций. Таким образом, функции интерфейса, показанные на фиг.5 и 6, можно разделять для получения того же результата, так же, как число 24 можно представить как 2, умноженное на 2, умноженное на 3, умноженное на 2. Соответственно согласно фиг.7 функцию, обеспечиваемую интерфейсом Интерфейс 1, можно разложить для преобразования коммуникаций интерфейса по множественным интерфейсам Интерфейс 1А, Интерфейс 1В, Интерфейс 1С и т.д., получая тот же результат. Согласно фиг.8 функцию, обеспечиваемую интерфейсом I1, можно разделить на множество интерфейсов I1a, I1b, I1c и т.д., получая тот же результат. Аналогично, интерфейс I2 второго сегмента кода, который принимает информацию от первого сегмента кода, можно разделить на множественные интерфейсы I2a, I2b, I2c и т.д. При разложении количество интерфейсов, входящих в состав первого сегмента кода, не обязано совпадать с количеством интерфейсов, входящих в состав второго сегмента кода. В любом из случаев, представленных на фиг.7 и 8, функциональная сущность интерфейсов Интерфейс 1 и I1 остается такой же, как показано на фиг.5 и 6 соответственно. Разделение между интерфейсами можно также осуществлять в соответствии со свойствами ассоциативности, коммутативности и другими математическими свойствами, так что разложение может быть трудно распознаваемым. Например, упорядочение операций может быть не важно, и, следовательно, функция, осуществляемая интерфейсом, может хорошо осуществляться до достижения интерфейса, другим фрагментом кода или интерфейса, или осуществляться отдельным компонентом системы. Кроме того, профессиональному программисту очевидно, что одного и того же результата можно достичь разными путями, делая разные функциональные вызовы.

В. Переопределение

В некоторых случаях имеется возможность игнорировать, добавлять или переопределять некоторые аспекты (например, параметры) программного интерфейса, тем не менее получая нужный результат. Это показано на фиг.9 и 10. Пусть, например, интерфейс Интерфейс 1, показанный на фиг.5, содержит функциональный вызов Square (input, precision, output) (квадрат), вызов, который содержит три параметра, input (вход), precision (точность) и output (выход), и который исходит от 1-го сегмента кода на 2-й сегмент кода. Если средний параметр, precision, не играет роли в данном сценарии, как показано на фиг.9, его можно просто игнорировать или даже заменить (в данной ситуации) параметром meaningless (не имеющий смысла). Можно также добавить параметр additional (дополнительный), не играющий роли. В любом случае, функция «возведения в квадрат» может выполняться при условии, что выходное значение возвращается после того, как входное значение возводится в квадрат вторым сегментом кода. «Точность» может быть весьма важным параметром для некоторой последующей или другой части вычислительной системы; если же выясняется, что для узкой цели вычисления квадрата «точность» не требуется, ее можно заменить или игнорировать. Например, вместо того, чтобы передавать действительное значение «точность», можно передавать не имеющее смысла значение, например дату рождения, не оказывая отрицательного влияния на результат. Аналогично, как показано на фиг.10, интерфейс I1 можно заменить интерфейсом I1′, переопределенным на игнорирование или добавление параметров к интерфейсу. Интерфейс I2 можно аналогично переопределить как интерфейс I2′, переопределенный на игнорирование ненужных параметров или параметров, которые можно обрабатывать в другом месте. Суть в том, что в некоторых случаях программный интерфейс может включать в себя аспекты, например параметры, которые, по некоторой причине, не нужны и потому могут игнорироваться, или переопределяться, или обрабатываться в другом месте для других целей.

С. Встроенное кодирование

Возможно также осуществлять слияние некоторых или всех функций двух отдельных модулей кода, в результате чего «интерфейс» между ними изменяет форму. Например, функции, указанные на фиг.5 и 6, можно преобразовать в функции, указанные на фиг.11 и 12 соответственно. Согласно фиг.11, предыдущие 1-й и 2-й сегменты кода, показанные на фиг.5, сливаются в модуль, содержащий их обе. В этом случае сегменты кода могут по прежнему связываться друг с другом, но интерфейс можно преобразовать к форме, более пригодной для единого модуля. Так, например, формальные операторы Call и Return могут уже не требоваться, но аналогичные обработка или отклик(и), соответствующие интерфейсу Интерфейс 1, по прежнему могут иметь силу. Аналогично, как показано на фиг.12, интерфейс I2, показанный на фиг.6, частично (или полностью) можно записать встроенным образом в интерфейс I1, чтобы сформировать интерфейс I1′′. Показано, что интерфейс I2 делится на I2a и I2b, и часть I2a интерфейса закодирована встроенным образом с интерфейсом I1 для формирования интерфейса I1′′. Для конкретного примера, положим, что интерфейс I1, показанный на фиг.6, осуществляет функциональный вызов square (input, output), получаемый от интерфейса I2, который, после обработки значения, переданного посредством input (для возведения его в квадрат) вторым сегментом кода, передает результат возведения в квадрат обратно посредством output. В этом случае обработка, производимая вторым сегментом кода (возведение input в квадрат), может осуществляться первым сегментом кода без обращения к интерфейсу.

D. Разъединение

Коммуникация от одного сегмента кода к другому может осуществляться косвенно путем разбиения коммуникации на множественные дискретные коммуникации. Это схематически обозначено на фиг.13 и 14. Согласно фиг.13, один или несколько фрагментов связующего программного обеспечения (интерфейс(ы) разъединения, поскольку они разъединяют функциональные возможности и/или функции интерфейса от исходного интерфейса) предусмотрены для преобразования коммуникаций на первом интерфейсе, Интерфейсе 1, чтобы согласовывать их с другим интерфейсом, в данном случае интерфейсами Интерфейсом 2А, Интерфейсом 2В и Интерфейсом 2С. Это должно происходить, например, когда установлена база приложений, предназначенная для связи, скажем, с операционной системой в соответствии с протоколом Интерфейса 1, но затем операционная система изменилась для использования другого интерфейса, в данном случае интерфейсов Интерфейса 2А, Интерфейса 2В и Интерфейса 2С. Дело в том, что исходный интерфейс, используемый 2-ым сегментом кода, изменился так, что он перестал быть совместимым с интерфейсом, используемым 1-ым сегментом кода, в результате чего используется посредник для обеспечения совместимости старого и нового интерфейсов. Аналогично, как показано на фиг.14, можно ввести третий сегмент кода с интерфейсом DI1 разъединения, чтобы принимать коммуникации от интерфейса I1, и с интерфейсом DI2 разъединения, чтобы передавать функциональные возможности интерфейса, например, на интерфейсы I2a и I2b, перенастроенные на работу с DI2, но при этом получать тот же функциональный результат. Аналогично, DI1 и DI2 могут работать совместно, чтобы преобразовывать функциональные возможности интерфейсов I1 и I2, указанных на фиг.11, к новой операционной системе, в то же время обеспечивая такой же или аналогичный функциональный результат.

Е. Переписывание

Еще один возможный вариант состоит в динамическом переписывании кода для замены функциональных возможностей интерфейса чем-то другим, что, тем не менее, приводит к тому же общему результату. Например, может иметь место система, в которой сегмент кода, представленный на промежуточном языке (например, Microsoft IL, Java ByteCode и пр.), поступает на компилятор или интерпретатор, работающий по принципу «на лету» (JIT), в среде выполнения (например, обеспечиваемый каркасом .Net, средой выполнения Java или другими подобного типа средами выполнения). JIT-компилятор может быть прописан так, чтобы динамически преобразовывать коммуникации от 1-го сегмента кода ко 2-му сегменту кода, т.е. согласовывать их с другим интерфейсом, который может требоваться 2-му сегменту кода (либо исходному, либо другому 2-му сегменту кода). Это обозначено на фиг.15 и 16. Согласно фиг.15, этот подход аналогичен вышеописанному сценарию разъединения. Это должно происходить, например, когда установленная база приложений предназначена для связи с операционной системой в соответствии с протоколом Интерфейса 1, но затем операционная система изменилась для использования другого интерфейса. JIT-компилятор можно использовать для согласования коммуникаций в оперативном режиме от приложений установленной базы к новому интерфейсу операционной системы. Согласно фиг.16, этот подход динамического переписывания интерфейса(ов) можно применять также для динамического разделения или иного изменения интерфейса(ов).

Заметим также, что вышеописанные сценарии для достижения того же или аналогичного результата, как интерфейс через альтернативные варианты осуществления, можно также комбинировать по-разному, последовательно и/или параллельно или с другим промежуточным кодом. Таким образом, представленные выше альтернативные варианты осуществления не являются взаимоисключающими, и их можно смешивать, подбирать и комбинировать для получения сценариев, идентичных или эквивалентных исходным сценариям, представленным на фиг.5 и 6. Заметим также, что, как и в большинстве программных конструкций, имеются другие аналогичные пути достижения тех же или сходных функциональных возможностей интерфейса, которые здесь могут не быть описаны, но, тем не менее, отвечают сущности и объему изобретения, т.е. следует отметить, что это, по меньшей мере, частично, функциональные возможности, представленные интерфейсом, и преимущественные результаты, обеспечиваемые им, которые обуславливают ценность интерфейса.

Заключение

Хотя вышеприведенное описание приведено в отношении структурных особенностей и/или этапов способа, следует понимать, что изобретение, заданное прилагаемой формулой изобретения, не ограничивается описанными конкретными особенностями или действиями. Напротив, конкретные особенности и действия раскрыты как иллюстративные формы реализации изобретения.

Похожие патенты RU2371758C2

название год авторы номер документа
ОБРАБОТКА ЭЛЕКТРОННЫХ ЧЕРНИЛ 2003
  • Данкан Ричард
  • Дресевич Бодин
  • Веким Джеми
  • Сутанто Херри
  • Рагхупати Саши
  • Кеннепел Тимоти Х.
  • Силадьи Зольтан
  • Тернер Джером
  • Лэндстэд Тодд
  • Ванг Хайонг
  • Снитсар Роман
RU2358308C2
ОБРАБОТКА ЭЛЕКТРОННЫХ ЧЕРНИЛ 2003
  • Данкан Ричард
  • Дресевич Бодин
  • Веким Джеми
  • Сутанто Херри
  • Рагхупати Саши
  • Кеннепел Тимоти Х.
  • Силадьи Зольтан
  • Тернер Джером
  • Лэндстэд Тодд
  • Вик Томас
  • Симмонс Алекс
  • Энгрев Питер
  • Полсон Кевин Филлип
  • Урата Кентаро
  • Додж Стив
  • Берджерон Дэвид М.
  • Шильман Майкл
RU2351982C2
ОБРАБОТКА ЭЛЕКТРОННЫХ ЧЕРНИЛ 2008
  • Данкан Ричард
  • Сутанто Херри
  • Веким Джеми
  • Рагхупати Саши
  • Кеннепел Тимоти Х.
  • Силадьи Зольтан
RU2485579C2
ОБРАБОТКА ЭЛЕКТРОННЫХ ЧЕРНИЛ 2003
  • Данкан Ричард
  • Сутанто Херри
  • Веким Джеми
  • Рагхупати Саши
  • Кеннепел Тимоти Х.
  • Силадьи Зольтан
RU2352981C2
ОБРАБОТКА ЭЛЕКТРОННЫХ ЧЕРНИЛ 2003
  • Данкан Ричард
  • Дресевич Бодин
  • Сутанто Херри
  • Веким Джеми
  • Рагхупати Саши
  • Кеннепел Тимоти Х.
  • Силадьи Зольтан
  • Шильман Майкл
RU2326435C2
УРОВЕНЬ ИНТЕГРАЦИИ СРЕД 2004
  • Субраманиан Срирам
  • Бланко Леонардо Э.
  • Кертис Дональд Б.
  • Беда Джозеф С.
  • Шнайдер Герхард А.
  • Шектер Грег Д.
  • Смит Адам М.
  • Ванденберг Эрик С.
  • Кэлкинс Мэттью В.
  • Галло Кевин Т.
  • Стоук Майкл
  • Гоэл Раджат
RU2360275C2
ИНТЕРФЕЙС ПРОГРАММИРОВАНИЯ ДЛЯ КОМПЬЮТЕРНОЙ ПЛАТФОРМЫ 2004
  • Богдан Джеффри Л.
  • Релая Роберт А.
RU2365978C2
ПРОЕЦИРОВАНИЕ СОБСТВЕННЫХ ИНТЕРФЕЙСОВ ПРИКЛАДНОГО ПРОГРАММИРОВАНИЯ ОПЕРАЦИОННОЙ СИСТЕМЫ В ДРУГИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ 2011
  • Пирсон Харольд
  • Ректор Брент
  • Лоувелл Мартин
  • Пракрия Махеш
  • Роу Стефен
  • Басу Тассадук
  • Влодарчик Роберт А.
  • Омия Эллиот Х.
  • Дунец Джерри
  • Холечек Алеш
  • Остерман Лоуренс В.
  • Цзэн Вэй
  • Вадхва Неерай
  • Солкар Шакил
  • Аксионкин Майкл
RU2598600C2
СИСТЕМЫ И СПОСОБЫ СОПРЯЖЕНИЯ ПРИКЛАДНЫХ ПРОГРАММ С ПЛАТФОРМОЙ ХРАНЕНИЯ НА ОСНОВЕ СТАТЕЙ 2003
  • Ву Уинни К.
  • Дим Майкл Э.
  • Шеппард Эдвард Дж.
  • Фан Лицзянь
  • Ли Дзянь
  • Тэйлор Майкл Б.
RU2412461C2
ЯЗЫК РАЗМЕТКИ И ОБЪЕКТНАЯ МОДЕЛЬ ДЛЯ ВЕКТОРНОЙ ГРАФИКИ 2003
  • Беда Джозеф С.
  • Галло Кевин Т.
  • Смит Адам М.
  • Вонг Гилман К.
  • Субраманиан Срирам
RU2321892C2

Иллюстрации к изобретению RU 2 371 758 C2

Реферат патента 2009 года ИНТЕРФЕЙС ПРОГРАММИРОВАНИЯ ДЛЯ КОМПЬЮТЕРНОЙ ПЛАТФОРМЫ

Изобретение относится к программно-аппаратным средствам разработки приложений в сетевой распределенной вычислительной среде. Техническим результатом изобретения является повышение эффективности и производительности платформы. Изобретение позволяет конструировать новые приложения на основе создания «привязок» (например, классов), которые устанавливают соответствие между элементом данных (например, текстом) и его воспроизведением на дисплее компьютера. При этом средствами изобретения при изменении элементов данных или типа упомянутой «привязки» соответствующим образом меняется способ его воспроизведения. Таким образом, пользователь, изменяя элементы данных и задавая свойства привязки, может создавать свое собственное приложение, которое функционирует заданным образом и использует услуги и службы, доступные в распределенной сети. При этом одновременно для пользователя также обеспечивается унифицированный доступ к различным источникам данных и службам. 3 н. и 28 з.п. ф-лы, 16 ил., 12 табл.

Формула изобретения RU 2 371 758 C2

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

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

3. Способ по п.2, отличающийся тем, что свойства привязки определяют поведение графических компонентов.

4. Способ по п.2, отличающийся тем, что свойства привязки определяют компоновку графических компонентов.

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

6. Способ по п.2, отличающийся тем, что графические компоненты заданы посредством векторной графики.

7. Способ по п.2, отличающийся тем, что свойства привязки дополнительно связаны с анимированием по меньшей мере одного графического компонента.

8. Способ по п.1, отличающийся тем, что операции связаны с созданием приложений, имеющих возможности навигации.

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

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

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

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

13. Способ по п.1, отличающийся тем, что операции дополнительно связаны с сериализацией содержимого.

14. Способ по п.1, отличающийся тем, что операции дополнительно связаны с автоматизацией генерирования пользовательского интерфейса.

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

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

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

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

19. Способ по п.1, отличающийся тем, что операции дополнительно создают компоненты графических объектов.

20. Способ по п.19, отличающийся тем, что операции изменяют внешний вид одного или нескольких компонентов графического объекта.

21. Способ по п.19, отличающийся тем, что операции перемещают графические объекты в другие позиции на дисплее.

22. Способ по п.19, отличающийся тем, что операции изменяют внешний вид графического объекта в соответствии с пользовательскими вводимыми данными.

23. Способ по п.19, отличающийся тем, что операции изменяют размещение графических объектов в соответствии с пользовательским вводом.

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

25. Компьютерная система по п.24, в которой свойства привязки определяют отображение элементов данных в виде графических компонентов.

26. Компьютерная система по п.25, выполненная с возможностью выполнения операций для задания поведения, по меньшей мере, одного графического компонента.

27. Компьютерная система по п.25, выполненная с возможностью выполнения операций для задания компоновки графических компонентов.

28. Компьютерная система по п.25, выполненная с возможностью выполнения операций для изменения внешнего вида графических компонентов.

29. Компьютерная система по п.25, выполненная с возможностью выполнения операций для анимирования графических компонентов.

30. Компьютерная система по п.24, выполненная с возможностью выполнения операций для генерирования геометрических форм.

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

Документы, цитированные в отчете о поиске Патент 2009 года RU2371758C2

ЕР 1077404 А2, 21.02.2001
US 5301336 A, 05.04.1994
МОБИЛЬНОЕ УСТРОЙСТВО, КАРТОЧКА С МИКРОСХЕМОЙ И СПОСОБ ИНФОРМАЦИОННОГО ОБМЕНА 1998
  • Риттер Рудольф
RU2212118C2
US 5301301 A, 05.04.1994
Перекатываемый затвор для водоемов 1922
  • Гебель В.Г.
SU2001A1

RU 2 371 758 C2

Авторы

Богдан Джеффри Л.

Релая Роберт А.

Даты

2009-10-27Публикация

2004-09-10Подача