2010-03-09 7 views
6

Nous utilisons WPF et avons une fenêtre dérivée d'une bibliothèque Docking. Cette fenêtre a une grille avec plusieurs éléments, l'une étant une grille de données WPF. Nous utilisons le modèle M-V-VM. Lorsque cette Windown est créée et affichée, aucune des lignes de cette grille de données n'est sélectionnée. Nous pouvons définir la ligne à afficher comme mis en évidence en faisant quelque chose comme:Déterminer qui a le focus dans la fenêtre WPF

SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0; 

Cela fait montrer la première ligne de la grille de données comme l'a souligné. Mais, et il n'y en a pas toujours une, cette rangée n'est pas sélectionnée et n'a pas de Focus. J'ai essayé la mise IsSelected et mise au point sur cette ligne comme dans:

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

Vais-je à propos de tout cela mal et est-il une autre façon de sélectionner la première ligne de la grille de données et mise au point réglée à elle? Généralement, lorsqu'une grille de données est créée, aucune ligne n'est sélectionnée jusqu'à ce que la souris de l'utilisateur clique sur la ligne souhaitée.

Toutes les pensées seraient grandement appréciées.

merci!

Répondre

9

Regardez le FocusManager. Il vous permet de définir le focus sur un autre élément de l'interface utilisateur via la méthode SetFocusedElement. En outre, il vous permet de déterminer l'élément actuellement ciblé dans votre application qui peut être utile pour déboguer les problèmes de mise au point. Snoop peut aussi être utile. Il montre l'élément actuellement ciblé dans la barre d'état inférieure.

Si vous utilisez le DataGrid du WPF Toolkit, préparez-vous à trouver des bogues relatifs à la gestion du focus. Certains ont été adressés recently.

+0

Merci Olli! Je vais jeter un coup d'oeil à ça maintenant. –

+0

C'était ce que je cherchais, mais ce n'était pas simple à comprendre même si vous m'avez indiqué dans la bonne direction. J'avais besoin de mettre du code dans la méthode onload pour définir le focus comme: Keyboard.Focus (shipmentDataGrid); où shipmentDataGrid est le propriétaire de mes touches de raccourci clavier. –

0

Il est également intéressant de comprendre la différence entre focus logique et focus clavier, qui sont des animaux tout à fait différents. La méthode .Focus() ne définit parfois que logique focus - ce qui n'est probablement pas ce que vous voulez.

Le documentation pour la méthode Focus vous dit qu'il retournera true si le focus du clavier a été défini et false autrement.

+0

Merci Dan! Vous avez en effet raison et c'était quelque chose que je n'avais pas réalisé. C'est le focus du clavier que je devais régler. –

Questions connexes