Pagina Silverlight non è la cattura di eventi di input
-
11-09-2019 - |
Domanda
Sono stato cercando di gestire l'evento KeyDown di un controllo utente (pagina) nella mia applicazione Silverlight, ma sembra che ci sia qualche strano comportamento da parte della funzionalità di input dell'utente Silverlight. L'evento non è sempre sollevato in qualsiasi circostanza. Ho anche provato allegando il gestore di eventi ad ogni controllo contenitore all'interno del UserControl, ma ancora senza fortuna. Infatti, il sistema di Silverlight input dell'utente "evento di routing" è del tutto nuovo e sembra piuttosto strano per me, quindi forse è solo un equivoco da parte mia, anche se ho un po 'all'oscuro su come procedere.
Il seguente codice è un modello della pagina particolare che sto 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>
In WPF, la soluzione più ovvia per un tale problema sarebbe per gestire l'evento PreviewKeyDown, ma purtroppo questo non è disponibile in Silverlight 2. Tutte le idee sarebbe il benvenuto (e una breve spiegazione del perché Silverlight instradamento evento si sta comportando come è).
Soluzione
È possibile gestire l'input dell'utente dal UIElement principale: Application.Current.RootVisual
Application.Current.RootVisual.KeyDown += Application_KeyDown
Quindi è possibile gestire nel metodo Application_KeyDown tutti gli input utente dalla tastiera.
Si può anche guardare a questo problema: gestione degli eventi KeyDown in una tela
Altri suggerimenti
Ho provato il XAML che fornite e non ho avuto un problema consegnando l'evento KeyDown.
Una cosa che potrebbe essere la causa: il plug-in Silverlight vedrà solo eventi di input se è a fuoco. Quindi, cercare e fare clic sul contenuto di Silverlight nel browser per dargli focus di input prima di premere i tasti.
Vorrei sapere se questo risolve il problema o meno.