2010-03-09 22 views
6

Estamos usando WPF y tenemos una ventana derivada de DockingLibrary. Esta ventana tiene una grilla con varios elementos, uno de ellos es una cuadrícula de datos WPF. Estamos usando el patrón M-V-VM. Cuando se crea y muestra esta ventana, no se selecciona ninguna de las filas en esta cuadrícula de datos. Podemos establecer la fila para mostrar como se destaca por hacer algo como:Determine quién tiene foco en WPF Ventana

SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0; 

Esto hace que la primera fila de la cuadrícula de datos debe aparecer en forma resaltada. Pero, y no siempre hay uno de estos, esta fila no está seleccionada ni tiene foco. He intentado establecer IsSelected y foco en esta fila como en:

SharedWindow.ShipmentWin.ShipVM.IsSelected = true; 
    bool focused = SharedWindow.ShipmentWin.shipmentDataGrid.Focus(); 

¿Voy sobre todo mal y hay alguna otra manera de seleccionar la primera fila de la cuadrícula de datos y establecer el foco en él? Normalmente, cuando se crea una cuadrícula de datos, no se selecciona ninguna fila hasta que el usuario haga clic en la fila deseada.

Cualquier pensamiento sería muy apreciado.

gracias!

Respuesta

9

Eche un vistazo a FocusManager. Le permite establecer el foco en otro elemento de la interfaz de usuario a través del método SetFocusedElement. Además, le permite determinar el elemento actualmente enfocado en su aplicación que puede ser útil para depurar problemas de enfoque. Snoop puede ser útil, también. Muestra el elemento actualmente enfocado en la barra de estado inferior.

Si usa DataGrid del kit de herramientas de WPF, prepárese para encontrar algunos errores en relación con el manejo del enfoque. Algunos han sido dirigidos al recently.

+0

Gracias Olli! Voy a echar un vistazo a esto ahora mismo. –

+0

Esto era lo que estaba buscando, pero no fue fácil de entender aunque me apuntó en la dirección correcta. Necesitaba poner el código en el método de carga para establecer el foco como: Keyboard.Focus (shipmentDataGrid); donde sendDataGrid es el propietario de mis teclas de método abreviado de teclado. –

0

Es también digno de entender la diferencia entre el foco lógico y foco del teclado, que son bastante diferentes animales. El método .Focus() a veces solo establece enfoque lógico - que probablemente no es lo que desea.

El documentation para el método Focus te dice que le proporcione true si se establece el foco del teclado, y false lo contrario.

+0

Gracias Dan! De hecho, eres correcto y esto fue algo de lo que no me había dado cuenta. Es el enfoque del teclado que necesitaba establecer. –

Cuestiones relacionadas