Маршрутизация ключевых событий к другому элементу управления - PullRequest
8 голосов
/ 14 сентября 2009

Существует ли какой-либо стандартный способ направить все ключевые события из элемента управления A в другой элемент управления B? Мне бы хотелось, чтобы фокус клавиатуры все еще был на A, однако обработчик событий A запустил бы все обработчики событий B для ключевых событий.

edit: Уточнение: недостаточно вызвать обработчик определенного события, который я написал для B. Мне нужно имитировать фактическое событие. Так, например, я хочу, чтобы, если ключ был отправлен на TextBox, он был бы записан на TextBox. Приведенное ниже решение этого не делает (не говоря уже о том, что если новые обработчики событий будут добавлены в B, то он полностью потерпит неудачу).

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

1 Ответ

4 голосов
/ 14 сентября 2009

Не могли бы вы сделать что-то подобное?

  private void button1_Click(object sender, RoutedEventArgs e)
  {
     // Check if the event needs to be passed to button2's handler
     if (conditionIsMet)
     {
        // Send the event to button2
        button2.RaiseEvent(e);
     }
     else
     {
        // button1's "Click" code
     }
  }

  private void button2_Click(object sender, RoutedEventArgs e)
  {
     // button2's "Click" code
  }

Редактировать: Изменен код для использования метода RaiseEvent() для программного вызова определенного события, а не просто для вызова обработчика события для button2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...