Domanda

Ho una tela all'interno di una vista di scorrimento. Ho allegato un gestore di eventi keydown alla vista di scorrimento. Per la maggior parte delle chiavi, viene chiamato il gestore.

Tuttavia, per i tasti freccia, il gestore non viene chiamato. Invece, la vista di scorrimento viene fatta scorrere nella direzione appropriata.

Ho anche collegato un gestore di keyup alla vista di scorrimento e il keyup viene chiamato per i tasti freccia.

Esiste un modo per ottenere l'evento freccia giù qui?

È stato utile?

Soluzione 2

Ho trovato questo stupido hack per farlo funzionare. L'impostazione della scrollview in modo che non sia un tabstop gli impedisce di mangiare gli eventi chiave .. ma poi ho avuto un'altra casella di testo sulla pagina che all'improvviso aveva SEMPRE messo a fuoco perché la scrollview non lo faceva più. Quindi ho risolto il problema lasciando che una casella di testo invisibile si focalizzasse.

scrollView.IsTabStop = false;

invisibleTextBox.Foreground = new SolidColorBrush(Colors.Transparent);
invisibleTextBox.Background = new SolidColorBrush(Colors.Transparent);
Canvas.SetZIndex(invisibleTextBox, -1000);
invisibleTextBox.KeyDown += new KeyEventHandler(HandleKeyDown);
invisibleTextBox.KeyUp += new KeyEventHandler(HandleKeyUp);

Modifica: ho anche dovuto spostare la casella di testo dalla tela perché, nonostante fosse invisibile, il suo contorno era ancora visibile.

2a modifica: ho usato una casella di testo perché è stata la prima cosa che ho scoperto in grado di catturare eventi KeyDown. Tuttavia, un UserControl può. Quindi sarebbe probabilmente meglio usare UserControl invece di una casella di testo invisibile. Se necessario, puoi chiamare Focus () su UserControl.

Altri suggerimenti

Usa semplicemente l'evento KeyUp. Funziona come un fascino.

Questa è una possibile risposta: non ho avuto la possibilità di provarlo. Ho avuto problemi simili in passato, tuttavia, quando un controllo consuma gli eventi prima che tu possa affrontarli. Ci sono alcune cose che potresti provare:

  1. Usa l'evento PreviewKeyDown, penso che sia così che si chiama. Potrebbe farti arrivare all'evento prima che venga consumato dal controllo.
  2. Prova il suggerimento di mblandfo, anche se se lo fai probabilmente formichi il tutto per concludere tutto in un controllo utente per nascondere ciò che stai facendo dal resto del tuo codice.
  3. Aggiungi un gestore di chiavi all'oggetto Canvas, potresti essere in grado di catturare l'evento lì e " bolla " attraverso il tuo evento.

Tranne 1) tutti questi contano come hack, davvero, ma buona fortuna, spero che uno di loro funzioni per te!

" Usa l'evento PreviewKeyDown, penso che sia così che si chiama. Potrebbe consentirti di accedere all'evento prima che venga consumato dal controllo. & Quot;

Funziona. Basta impostare gli argomenti dell'evento " Handled = true " e ScrollViewer (o ListBox) non accederà all'evento dopo averlo già gestito. Non avevo bisogno di usare la proprietà IsTabStop per ListBox; quello e non sembrava fare nulla comunque.

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