2009-05-06 22 views
19

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

32

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

3

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; 
} 
+31

Questa non è una domanda "do-my-homework-for-me". È un "Sto facendo i miei compiti, ma sono bloccato, qualcuno può darmi qualche domanda". –

2

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.

1

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" 
3
Textbox.Focus(); 

questo si concentrerà sulla casella di testo

6

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(); 
      }); 
+0

per me, Just Just Just funziona. Grazie... –

1

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 } 
); 
0

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}" /> 
Problemi correlati