модель автоматизации пользовательского интерфейса поддержка перетаскивания

Microsoft модель автоматизации пользовательского интерфейса определяет два шаблона элементов управления для поддержки сценариев перетаскивания: шаблон элемента управления Перетаскивание и Шаблон элемента управления DropTarget. Вы реализуете шаблон элемента управления Перетаскивание для перетаскиваемого элемента и шаблон элемента управления DropTarget для элемента, который может получать перетаскиваемый элемент; т. е. цель удаления. Два шаблона элементов управления предоставляют сведения, которые могут использоваться вспомогательными технологиями, чтобы помочь пользователю специальных возможностей выполнить операцию перетаскивания.

Перетаскивание стилей

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

Исходный/целевой стиль

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

Когда пользователь запускает операцию перетаскивания:

Когда операция перетаскивания попадает в целевую область:

Когда операция перетаскивания покидает целевую область:

Когда пользователь отпускает перетаскиваемый элемент через нецельную:

Когда пользователь отпускает перетаскиваемый элемент по целевому объекту:

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

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

Любой целевой объект удаления, которому необходимо обновить свойство IDropTargetProvider::D ropTargetEffect на лету, должен вызывать дополнительное событие изменения свойства для этого свойства.

Только исходный стиль

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

Когда пользователь запускает операцию перетаскивания:

Когда операция перетаскивания попадает в целевую область:

  • Источник присваивает свойству IDragProvider::D ropEffect соответствующее значение.

Когда операция перетаскивания покидает целевую область:

  • Источник присваивает свойству IDragProvider::D ropEffect соответствующее значение.

Когда пользователь отпускает перетаскиваемый элемент через нецельную:

Когда пользователь отпускает перетаскиваемый элемент по целевому объекту:

  • Источник вызывает событие DragComplete (UIA_Drag_DragCompleteEventId).
  • Источник задает свойство IDragProvider::D ropEffect , чтобы указать эффект, произошедший при удалении элемента.

Перетаскивание нескольких элементов

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

Когда пользователь запускает операцию перетаскивания:

  • Поставщик создает элемент источника master.
  • Исходный элемент master вызывает событие DragStart (UIA_Drag_DragStartEventId).
  • Исходный элемент master задает для свойства IDragProvider::IsGrabbed значение TRUE.
  • Исходный элемент master обновляет список перехватываемых элементов, чтобы включить все перетаскиваемые элементы, чтобы метод GetGrabbedItems смог получить список.

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

Клиентские интерфейсы для перетаскивания

модель автоматизации пользовательского интерфейса клиентские приложения используют интерфейсы IUIAutomationDragPattern и IUIAutomationDropTargetPattern для доступа к данным перетаскивания из элементов пользовательского интерфейса.