Главная » WPF » Взаимодействие с устройствами ввода

0

Объектные модели всех устройств ввода имеют одну и ту же структуру. Суще ствует один статический служебный  класс (Keyboard, Mouse, Stylus  или Tablet) и класс устройства (KeyboardDevice, MouseDevice и т.д.). Служебный класс пре

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

Чтобы лучше освоиться с концепцией взаимодействия, рассмотрим клавиату ру. Выше в реализации класса KeyChordItemGesture вы могли заметить,  что те кущее состояние  клавиш  модификаторов мы получаем от класса Keyboard:

public override bool Matches(

object targetElement, InputEventArgs inputEventArgs) {

KeyEventArgs e = inputEventArgs as KeyEventArgs;

if (e != null) {

return e.Key == Key && Keyboard.Modifiers == Modifiers;

}

return false;

}

Keyboard.Modifiers – это статическое  свойство, реализованное путем обраще ния к свойству  Keyboard.PrimaryDevice.Modifiers. В системе может быть только одна клавиатура и только одна мышь. Однако разрешается подключать  несколь ко планшетов  (дигитайзеров), и с каждым планшетом  может быть ассоциирован один или несколько  стилосов. Поэтому  свойство Tablet.TabletDevices возвраща ет набор всех планшетов, опознанных системой.

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

Фокус клавиатуры

В каждый  момент  времени  только  один элемент  управления может  владеть фокусом  клавиатуры. К  работе  с фокусом  имеют  отношение  два  интересных класса: KeyboardNavigation и FocusManager. KeyboardNavigation отвечает за пе ремещение фокуса с одного элемента на другой при нажатии различных клавиш, а FocusManager – за отслеживание фокуса  клавиатуры. Вообще то, про  класс FocusManager можно и забыть, так как все представляющие интерес события  и свойства этого класса встречаются  в более удобных местах (например, в классах Keyboard  и UIElement).

Класс  же KeyboardNavigation позволяет  элементам  управления решить,  как они хотят реагировать  на команды, изменяющие фокус клавиатуры. Чаще всего, наверное, применяются свойства IsTabStop и TabIndex. Обычно пользователь пе ремещает фокус клавиатуры с помощью клавиши Tab (если не считать мыши, ко нечно). Эта клавиша передает фокус логически следующему элементу, который может воспринимать данные от клавиатуры.

Чего мы достигли?

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

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии