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 é).

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top