2009-08-28 970 views

Respuesta

99

En XAML:

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

Prefiero este enfoque a los otros anteriores, ya que se mantiene en línea con MVVM. –

+1

El elemento enfocado es de solo lectura ¿Cómo se puede configurar en xaml? Lo usé y no funcionó WPFKK

+0

@ user841612, compruebe el siguiente enlace y verifique el ensamblado y el espacio de nombre https://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.focusedelement%28v=vs.110%29. aspx – usefulBee

43

tratar FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID) 
+4

¿Qué sucede si el elemento que desea establecer el foco en * es * el elemento principal o.O? –

+7

FocusManager.SetFocusedElement (FocusManager.GetFocusScope (parentElement), parentElement); – Philter

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

MSDN:

No puede haber sólo un elemento en el conjunto escritorio que tiene el foco del teclado. En WPF, el elemento que tiene el foco del teclado tendrá IsKeyboardFocused establecido en verdadero.

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

15

Prueba esto: MyTextBox.Focus ();

+0

Esta es la respuesta más elegante y no requiere que también especifiques el padre. Gracias por esto, ¡funciona genial para mí! – dbeachy1

7

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

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}" /> 
+1

Esto funcionó para mí también. El resto no. Gracias por el enlace, eso fue bastante interesante. También es interesante que una cosa tan simple puede ser tan complicada. – TravisWhidden

+2

La respuesta anterior funciona bien independientemente de si el contenedor es un Gird o un StackPanel. Como la estructura de su cuadrícula no está clara, es difícil saber qué pudo haber salido mal. Es bueno ver alternativas sin embargo. – usefulBee

+1

Para mí, este es también el único que funciona correctamente. Buena manera. – OregonGhost

19

Nadie explicó hasta ahora por qué th El código de e 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(); 
    } 
} 
+5

LA RESPUESTA MÁS ÚTIL EN ESTE HILO ENTERO – Airhead

Cuestiones relacionadas