2009-05-06 33 views
19

Actualmente estoy en el proceso de crear un teclado en pantalla. Estoy manejando el botón clic usando routedcommands. El problema es que cuando hago clic en el botón en el panel del teclado, el foco cambia al botón en lugar de a la caja de texto. El requisito establece que siempre debe aparecer un cursor en el cuadro de texto para indicar la posición donde se insertará el siguiente carácter. ¿Hay alguna manera de mantener el foco en el cuadro de texto mientras se hace clic en el botón?Cursor Enfocar en cuadro de texto en WPF/C#

Respuesta

32

para ajustar el enfoque lógico para un control de entrada

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

Para ajustar el foco del teclado a un control de entrada

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

Para conocer la diferencia entre el enfoque lógico y teclado

Input Overview - Focus en MSDN

3

Me gusta estos do-my-homework preguntas por mi; "el requisito dice" ... no tiene precio. Para aquellos que encuentran esto a través de Google, el truco para mover el cursor de manera progmática en un WPF TextBox es usar la propiedad SelectioNStart.

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

Esta no es una pregunta de "do-my-tarea-para-mí". Es una pregunta "Estoy haciendo mi tarea, pero estoy atascado, ¿alguien puede darme algunos consejos". –

2

La forma en que resolvió este problema fue establecer focusable=false a todos los botones/controles del teclado. De esa forma no perderás enfocado del control actual.

1

Su problema se puede resolver utilizando un alcance de foco separado para su "teclado". Basta con aplicar la siguiente propiedad al control que contiene todos los botones y entonces van a estar en un ámbito de foco independiente y no tendrá el enfoque establecido para ellos cuando se hace clic

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

esto se centrará en la cuadro de texto

6

Obtenga la referencia para el control específico (en ese caso TextBox). Después de clic, en el método Button_Click pega este:

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

para mí, Just Just It works. Gracias... –

1

tuve que usar esto para conseguir el resultado deseado

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

que quería hacer lo mismo, pero nada parecía funcionar para mí. Realmente necesitaba una respuesta que funcionara exclusivamente en XAML ya que estoy trabajando con MVVM.

fin encontré este ejemplo: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

y lo modificó para esto:

En la sección 'Recursos':

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

En mi definición de cuadrícula:

<Grid Style="{StaticResource FocusTextBox}" /> 
Cuestiones relacionadas