Voglio interpretare il tasto Invio come tasto Tab in tutta la mia applicazione WPF, cioè ovunque nella mia applicazione quando l'utente preme Invio Voglio mettere a fuoco il prossimo controllo focalizzabile, tranne quando il pulsante è focalizzato. C'è un modo per farlo nel circolo di vita delle applicazioni? Qualcuno può darmi un esempio?
Grazie mille!
Interpreta immetti come scheda WPF
risposta
È possibile utilizzare il mio codice EnterKeyTraversal attached property se lo si desidera. Aggiungerlo al contenitore di livello superiore su una finestra WPF e tutto all'interno tratterà entrare come scheda:
<StackPanel my:EnterKeyTraversal.IsEnabled="True">
...
</StackPanel>
Il problema che sto affrontando è che quando il fuoco si accende un pulsante, voglio eseguire il comando e andare avanti il indice tab successivo. È possibile farlo?? –
woodyiii, c'è una funzione nella UIElement
chiamato PredictFocus()
, che con il suo nome conosce la sua funzione, allora si può controlla se quell'elemento è abilitato o meno in modo da spostare il focus su di esso o no ...
Ho risolto il problema di woodyiii aggiungendo un oggetto FrameworkElement.Tag (il cui valore è IgnoreEnterKeyTraversal) a determinati elementi (pulsanti, caselle combinate, o qualcosa che voglio ignorare l'attraversamento del tasto enter) nel mio XAML. Ho quindi cercato questo tag & nella proprietà allegata. In questo modo:
if (e.Key == Key.Enter)
{
if (ue.Tag != null && ue.Tag.ToString() == "IgnoreEnterKeyTraversal")
{
//ignore
}
else
{
e.Handled = true;
ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
Assicuratevi di farlo nell'evento 'KeyDown' e non in' PreviewKeyDown', altrimenti il caret non si muoverà. Inoltre, non si specifica cosa 'ue' è, ma almeno per me deve essere' e.Source'. – Conrad
Questo va bene. Funziona su TextBox se ha Tag = "IgnoreEnterKeyTraversal" ma voglio la stessa cosa su ComboBox con IsEditable = "true". In quello scenario il tuo trucco non funziona. Puoi dirmi come posso farlo ?? – Vishal
di cambiarlo in tutto il progetto è necessario fare questo
In App.xaml.cs:
protected override void OnStartup(StartupEventArgs e) { EventManager.RegisterClassHandler(typeof(Grid), Grid.PreviewKeyDownEvent, new KeyEventHandler(Grid_PreviewKeyDown)); base.OnStartup(e); } private void Grid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) { var uie = e.OriginalSource as UIElement; if (e.Key == Key.Enter) { e.Handled = true; uie.MoveFocus( new TraversalRequest( FocusNavigationDirection.Next)); } }
Compile. E fatto. Ora puoi usare la scheda "inserisci come". Nota: Questo lavoro per gli elementi nella griglia
BabySmash da Scott Hanselman utilizza alcuni tastiera sovrascrive – bendewey