Attualmente sto creando una tastiera su schermo. Sto gestendo il clic del pulsante usando i routedcommands. Il problema è che quando faccio clic sul pulsante nel pannello della tastiera, lo stato attivo passa al pulsante anziché alla casella di testo. Il requisito stabilisce che un cursore debba sempre apparire nella casella di testo per indicare la posizione in cui verrà inserito il prossimo carattere. C'è un modo in cui posso mantenere l'attenzione sulla casella di testo mentre si fa clic sul pulsante.Focus cursore sulla casella di testo in WPF/C#
risposta
Per impostare attivo logico ad un controllo di input
FocusManager.SetFocusedElement(this, textboxJack); // set logical focus
Per impostare stato attivo a un controllo di input
Keyboard.Focus(textboxJill); // set keyboard focus
Per conoscere la differenza tra logica fuoco della tastiera e
Input Overview - Focus su MSDN
Mi piacciono questi do-my-compiti -per-me domande; "il requisito afferma" ... impagabile. Per coloro che trovano questo tramite Google, il trucco per spostare progressivamente il cursore in un TextBox WPF consiste nell'utilizzare la proprietà SelectioNStart.
private void Button_Click(object sender, RoutedEventArgs e)
{
textBox.Focus();
textBox.SelectionStart = textName.Text.Length;
}
Il modo in cui ho risolto questo problema era impostare focusable=false
su tutti i pulsanti/controlli sulla tastiera. In questo modo non perdi il focus del controllo corrente.
Il problema può essere risolto utilizzando un campo di messa a fuoco separato per la "tastiera". Basta applicare la seguente struttura al controllo che contiene tutti i pulsanti e allora saranno in un ambito di messa a fuoco separato e non avrà il focus regolato per quando si fa clic
FocusManager.IsFocusScope="True"
Textbox.Focus();
questo si concentrerà sulla casella di testo
Ottenere il riferimento per il controllo specifico (in tal caso TextBox). Dopo aver fatto clic, in modo Button_Click incollare questo:
Dispatcher.BeginInvoke((ThreadStart)delegate
{
control.Focus();
});
per me, Just Just Just funziona. Grazie... –
ho dovuto usare questo per ottenere il mio risultato desiderato
FocusManager.SetFocusedElement(this, UserNameautoCompleteBox);
Key key = Key.Enter; // Key to send
var target = Keyboard.FocusedElement; // Target element
RoutedEvent routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(UserNameautoCompleteBox),
0,
key) { RoutedEvent = routedEvent }
);
ho voluto fare la stessa cosa, ma nulla sembrava funzionare per me. Avevo davvero bisogno di una risposta che funzionasse puramente in XAML poiché sto lavorando con MVVM.
finalmente ho trovato questo esempio: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
e modificato a questo:
Nella sezione 'Risorse':
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
Nella mia definizione della griglia:
<Grid Style="{StaticResource FocusTextBox}" />
Questa non è una domanda "do-my-homework-for-me". È un "Sto facendo i miei compiti, ma sono bloccato, qualcuno può darmi qualche domanda". –