página Silverlight não captura eventos de entrada
-
11-09-2019 - |
Pergunta
Eu tenho tentado manipular o evento KeyDown de um UserControl (página) no meu aplicativo Silverlight, mas parece haver algum comportamento estranho por parte da funcionalidade de entrada do usuário Silverlight. O evento não está sendo levantada em qualquer circunstância. Eu até tentei colocar o manipulador de eventos para cada controle de recipiente dentro do UserControl, mas ainda sem sorte. De fato, a entrada do usuário Silverlight "roteamento de eventos" sistema é bastante novo e parece um pouco estranho para mim, então talvez seja apenas um mal-entendido da minha parte, embora eu tenha um pouco à nora sobre como proceder.
O código a seguir é um modelo da página particular com o qual estou testando.
<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>
Em WPF, a solução óbvia para tal questão seria para manipular o evento PreviewKeyDown, mas infelizmente isso não está disponível no Silverlight 2. Todas as idéias seriam bem-vindos (e uma breve explicação do porquê de roteamento evento Silverlight está se comportando como é).
Solução
Você pode gerenciar a entrada do usuário a partir do UIElement principal: Application.Current.RootVisual
Application.Current.RootVisual.KeyDown += Application_KeyDown
Em seguida, você pode manipular no método Application_KeyDown todas as entradas do usuário a partir do teclado.
Você também pode olhar para esta questão: manipulação de eventos KeyDown em uma lona
Outras dicas
Eu tentei o XAML que você forneceu e não ter um problema entregando o evento KeyDown.
Uma coisa que poderia estar causando isso: o plugin Silverlight só vai ver eventos de entrada se for focado. Portanto, tente e clique sobre o conteúdo Silverlight no navegador para dar-lhe o foco de entrada antes de pressionar as teclas.
Deixe-me saber se isso resolve o seu problema ou não.