2009-05-06 10 views
19

Je suis actuellement en train de créer un clavier à l'écran. Je gère le clic de bouton en utilisant les commandes routed. Le problème est que lorsque je clique sur le bouton dans le panneau du clavier, le focus se déplace sur le bouton plutôt que sur la zone de texte. L'exigence stipule qu'un curseur doit toujours apparaître dans la zone de texte pour indiquer la position où le caractère suivant sera inséré. Est-il possible de garder le focus sur la zone de texte lorsque l'on clique sur le bouton.Curseur Focus sur Textbox dans WPF/C#

Répondre

32

Pour définir le focus logique à un contrôle d'entrée

FocusManager.SetFocusedElement(this, textboxJack);  // set logical focus 

Pour définir le focus du clavier à un contrôle d'entrée

Keyboard.Focus(textboxJill);        // set keyboard focus 

Pour connaître la différence entre le focus logique et le clavier

Input Overview - Focus sur MSDN

3

J'aime ceux-ci do-my-homework -pour moi des questions; "l'exigence stipule" ... inestimable. Pour ceux qui trouvent cela via Google, l'astuce pour déplacer de manière progmatique le curseur dans un TextBox WPF est d'utiliser la propriété SelectioNStart.

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    textBox.Focus(); 
    textBox.SelectionStart = textName.Text.Length; 
} 
+31

Ce n'est pas une question «fais-moi-devoirs-pour-moi». C'est un "Je fais mes devoirs, mais je suis coincé, quelqu'un peut-il me donner quelques indications". –

2

La façon dont je résolu ce problème était de mettre focusable=false à tous les boutons/commandes du clavier. De cette façon, vous ne perdez pas le focus du contrôle actuel.

1

Votre problème peut être résolu en utilisant une zone de mise au point séparée pour votre "clavier". Il suffit d'appliquer la propriété suivante au contrôle qui contient tous vos boutons, puis ils seront dans un champ de mise au point séparée et n'aura pas l'accent mis les lorsque vous cliquez dessus

FocusManager.IsFocusScope="True" 
3
Textbox.Focus(); 

ce se concentrera sur la textbox

6

Obtenez la référence pour le contrôle spécifique (dans ce cas TextBox). Après avoir cliqué, dans la méthode Button_Click coller ceci:

Dispatcher.BeginInvoke((ThreadStart)delegate 
      { 
       control.Focus(); 
      }); 
+0

pour moi, juste juste que ça fonctionne. Merci... –

1

je devais l'utiliser pour obtenir mon résultat souhaité

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

Je voulais faire la même chose, mais rien ne semblait fonctionner pour moi. J'avais vraiment besoin d'une réponse qui fonctionne uniquement en XAML pendant que je travaille avec MVVM.

j'ai finalement trouvé cet exemple: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

et modifia à ceci:

Dans la section 'Ressources':

<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> 

Dans ma définition de la grille:

<Grid Style="{StaticResource FocusTextBox}" /> 
Questions connexes