Pregunta

He estado tratando de controlar el evento KeyDown de un control de usuario (página) en mi aplicación Silverlight, pero parece que hay un comportamiento extraño por parte de la funcionalidad de la entrada del usuario de Silverlight. El evento no está siendo levantado bajo ninguna circunstancia. Incluso he intentado fijar el controlador de eventos para cada control contenedor dentro del control de usuario, pero aún sin suerte. De hecho, el sistema Silverlight entrada del usuario "evento de enrutamiento" es bastante novedoso y parece bastante extraño para mí, así que tal vez es sólo un malentendido por mi parte, aunque no tengo ni idea en lugar de cómo proceder.

El código siguiente es una plantilla de la página en particular con la que estoy probando.

<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>

En WPF, la solución obvia para un problema de este tipo sería para controlar el evento PreviewKeyDown, pero por desgracia esto no está disponible en Silverlight 2. Cualquier idea sería bienvenido (y una breve explicación de por qué el enrutamiento de eventos Silverlight se comporta como lo es).

¿Fue útil?

Solución

Puede gestionar la entrada del usuario desde el UIElement principal: Application.Current.RootVisual

Application.Current.RootVisual.KeyDown += Application_KeyDown

A continuación, puede manejar en el método Application_KeyDown todas las entradas de usuario desde el teclado.

También puede examinar esta cuestión: manejo de eventos KeyDown en un lienzo

Otros consejos

He probado el XAML que siempre y no tienes un problema entregando el evento KeyDown.

Una cosa que podría ser la causa: el plugin Silverlight sólo verá los eventos de entrada si se enfoca. Así que tratar de hacer clic en el contenido de Silverlight en el navegador para darle el foco de entrada antes de pulsar las teclas.

Avisadme si se soluciona su problema o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top