Я недавно занимался разработкой игр и получил доступ к Microsoft XNA4.0 (Monogame соответственно). К сожалению, XNA на самом деле не поставляется с инструментарием пользовательского интерфейса, поэтому я начал писать его сам (я знаю, что там есть много сторонних инструментов, но для образовательных целей я решил заново изобрести колесо).Ввод устройства управления и фокус в UI
Мой вопрос: как интерфейс UI управляет и управляет вводом устройств, особенно в отношении фокусировки? Скажем, у меня есть абстракция управляемых событий над физической клавиатурой, которая состояние опрашиваемой с помощью простого цикла:
public interface IKeyboard {
event EventHandler<Keys> KeyPressed;
void Update();
}
Каждого элемент управления, который может обрабатывать ключевые инсульты необходим доступ к этому провайдеру, так он будет получать уведомления происходит событие KeyPressed. Дело в том, что, когда у меня есть 10 текстовых полей на экране, и все слушают входы, на каждом шаге каждый текстовый блок записывает ввод, даже если он не находится в фокусе.
Возможных решений будут:
- Управления состояния фокусировки в каждом управлении и обрабатывать только входные данные в элементе управления, который в настоящее время ориентирован
или ...
- Processing ввод от централизованного менеджера и отправка его только на сфокусированное управление
Как делают существующие инструменты пользовательского интерфейса, такие как WPF или Winforms? Индивидуальные элементы управления там кажутся такими .. развязанными, но каждый элемент управления должен знать о сосредоточенном в данный момент.