2009-05-06 13 views
19

Ich bin gerade dabei, eine Bildschirmtastatur zu erstellen. Ich verarbeite den Knopfklick mit routedcommands. Das Problem ist, dass wenn ich auf die Schaltfläche im Tastaturfeld klicke, der Fokus auf die Schaltfläche und nicht auf die Textbox verschoben wird. Die Anforderung besagt, dass immer ein Cursor im Textfeld angezeigt werden muss, um die Position anzugeben, an der das nächste Zeichen eingefügt wird. Gibt es eine Möglichkeit, dass ich mich auf die Textbox konzentrieren kann, während auf die Schaltfläche geklickt wird.Cursor Fokus auf Textfeld in WPF/C#

Antwort

32

Um die logischen Fokus auf ein Eingangssteuer

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

Zum Einstellen des Tastaturfokus auf ein Eingangssteuer

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

Um zu wissen, den Unterschied zwischen logischem und Tastatur eingestellt Fokus

Input Overview - Focus auf MSDN

3

Ich mag diese Do-my-Hausaufgaben für mich Fragen; "Die Anforderung besagt" ... unbezahlbar. Für diejenigen, die dies über Google finden, besteht der Trick, den Cursor in einer WPF-TextBox zu bewegen, darin, die SelectioNStart-Eigenschaft zu verwenden.

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

Dies ist keine "Do-my-Hausaufgaben-für-mich" -Frage. Es ist eine "Ich mache meine Hausaufgaben, aber ich bin fest, kann jemand mir einige Hinweise geben" Frage. –

2

So wie ich dieses Problem gelöst war focusable=false auf alle Tasten/Bedienungselemente auf der Tastatur einzustellen. Auf diese Weise verlieren Sie nicht den Fokus der aktuellen Kontrolle.

1

Ihr Problem kann gelöst werden, indem Sie einen separaten Fokusbereich für Ihre "Tastatur" verwenden. Wenden Sie einfach die folgende Eigenschaft auf das Steuerelement, das alle Ihre Tasten enthält, und dann werden sie in einem separaten Fokusbereich und wird der Fokus nicht auf sie gesetzt haben, wenn

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

dies auf das konzentrieren Textfeld

6

Holen Sie sich die Referenz für das spezifische Steuerelement (in diesem Fall TextBox). Nach dem Klick, das in Button_Click Methode einfügen:

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

für mich, Just Just Nur es funktioniert. Vielen Dank... –

1

ich diese verwenden musste mein gewünschtes Ergebnis

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

Ich wollte das Gleiche tun zu bekommen, aber nichts schien für mich zu arbeiten. Ich brauchte wirklich eine Antwort, die rein in XAML arbeitete, während ich mit MVVM arbeite.

Schließlich fand ich dieses Beispiel: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

und modifiziert es dazu:

Im Abschnitt 'Ressourcen':

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

In meinem Start Definition:

<Grid Style="{StaticResource FocusTextBox}" /> 
Verwandte Themen