Страница Silverlight не перехватывает входные события
Я пытался обработать событие KeyDown UserControl (страницы) в моем приложении Silverlight, но, похоже, наблюдается некоторая странная ситуация со стороны функции пользовательского ввода Silverlight. Событие не поднимается ни при каких обстоятельствах. Я даже пытался прикрепить обработчик событий к каждому элементу управления контейнера в UserControl, но все же безуспешно. В самом деле, система пользовательского ввода Silverlight "маршрутизация событий" довольно нова и кажется мне довольно странной, так что, возможно, это просто недоразумение с моей стороны, хотя я и понятия не имею, как поступить.
Следующий код представляет собой шаблон конкретной страницы, с которой я тестирую.
<UserControl x:Class="MyNamespace.CreditsPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
KeyDown="UserControl_KeyDown">
<Grid x:Name="LayoutRoot">
<Border>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Vertical">
<TextBlock TextAlignment="Center">
A line of text.<LineBreak />
<LineBreak />
A line of text.<LineBreak />
<LineBreak />
A line of text.<LineBreak />
<LineBreak />
A line of text.<LineBreak />
</TextBlock>
</StackPanel>
</Border>
</Grid>
</UserControl>
В WPF очевидным решением для такой проблемы будет обработка события PreviewKeyDown, но, к сожалению, это не доступно в Silverlight 2. Любые идеи приветствуются (и краткое объяснение того, почему маршрутизация событий Silverlight ведет себя так, как она есть).
2 ответа
Вы можете управлять пользовательским вводом из основного UIElement: Application.Current.RootVisual
Application.Current.RootVisual.KeyDown += Application_KeyDown
Затем вы можете обработать в методе Application_KeyDown все пользовательские вводы с клавиатуры.
Вы также можете посмотреть на эту проблему: Обработка события KeyDown в Canvas
Я попробовал xaml, который вы предоставили, и у меня не было проблем с обработкой события KeyDown.
Это может быть причиной одного: плагин Silverlight будет видеть входные события, только если он сфокусирован. Поэтому попробуйте щелкнуть содержимое Silverlight в браузере, чтобы выделить его, прежде чем нажимать клавиши.
Дайте мне знать, если это решит вашу проблему или нет.