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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top