Как я могу получить событие KeyDown на объекте Страницы или UserControl WPF?

Часть меня удивляется, если вы могли бы предоставить свою собственную функцию санитарии так же просто, как это:

$value = preg_replace('/[^a-zA-Z_]*/', '', $value);

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

33
задан Sailing Judo 8 December 2008 в 02:07
поделиться

2 ответа

Я полагаю, что событие PreviewKeyDown является направленным событием туннелирования, а не пузырящимся. Если это так, тогда если Ваш Page не получает событие, UserControl не должен быть ни один, так как это ниже Page в визуальном дереве. Возможно, попытайтесь обработать его на верхнем уровне Вашего приложения (Окно, возможно?) и видят, получает ли это событие?

Другая опция, которая могла бы помочь, будет состоять в том, чтобы использовать что-то как Ищейка в CodePlex для выяснения, куда события идут.

21
ответ дан Jeff T. 8 July 2019 в 03:02
поделиться

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

то, что я обнаружил (после нескольких часов разочарования, конечно !!!), заключается в том, что если вы НЕ сфокусируете внимание на одном из упомянутых выше Controls / Elements, событие PreviewKeyDown НЕ запускается в UserControl (останавливается где-то на Frame уровень), но как только вы помещаете фокус (например, вызываете ctrl.Focus () внутри обработчика события UserCotrol Loaded) на одном из элементов управления, происходит волшебство, оно работает, событие запускается также для UserControl.

конечно если подумать об этом позже, это имеет достаточно смысла, но я на 100% уверен, что это удивит как минимум 5 из 10 человек:

26
ответ дан 27 November 2019 в 16:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: