Pregunta Establecer el foco en el cuadro de texto en WPF


Cómo establecer el foco en un TextBox elemento en WPF

Tengo este código:

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

...Pero no está funcionando.

¿Alguna idea?


75
2017-08-28 06:44


origen


Respuestas:


En XAML:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
   <TextBox Name="Box" />
</StackPanel>

112
2018-02-19 20:03



tratar FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID)

44
2017-08-28 06:50



Nadie explicó hasta ahora por qué el código en la pregunta no funciona. Mi suposición es que el código fue colocado en el constructor de la ventana. Pero en este momento es demasiado pronto para establecer el foco. Tiene que hacerse una vez que la Ventana esté lista para la interacción. El mejor lugar para el código es el evento Loaded:

public KonsoleWindow() {
  public TestWindow() {
    InitializeComponent();
    Loaded += TestWindow_Loaded;
  }

  private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
    txtCompanyID.Focus();
  }
}

30
2017-07-04 09:17



txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

msdn:

Solo puede haber un elemento en el   todo el escritorio que tiene el foco del teclado.   En WPF, el elemento que tiene teclado   el foco tendrá el conjunto IsKeyboardFocused   a verdad

Podrías romper después de la línea de configuración y verificar el valor de IsKeyboardFocused propiedad. También verifique si realmente llega a esa línea o tal vez establece algún otro elemento para enfocarse después de eso.


20
2017-08-28 06:53



Prueba esto : MyTextBox.Focus ( );


17
2018-03-07 14:40



Nada de esto funcionó para mí ya que estaba usando una grilla en lugar de un StackPanel.

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

y lo modificó a 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}" />

8
2018-06-01 10:33