página Silverlight no la captura de eventos de entrada
-
11-09-2019 - |
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).
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.