2013-04-05 2 views
0

J'ai un DataGrid implémenté dans une application MVVM/Prism. Le DataGrid prend en charge Couper/Copier/Coller/Supprimer via un menu contextuel et des gestes au clavier.WPF DataGrid perd le focus après la suppression/la suppression de ligne

Je trouve que lorsqu'une ligne est supprimée/coupée, la totalité du DataGrid perd le focus et le focus du clavier se déplace sur le dernier contrôle focalisé.

Est-il possible d'empêcher cela?

Après avoir retiré une ligne, il se peut que je souhaite coller de nouveau dans le DataGrid. De plus, si la grille est vide, il n'y a aucun moyen d'obtenir le focus du clavier. Cliquer sur une grille vide ne lui donne pas le focus.

Voici une question similaire, mais il ne résout pas le problème pour moi: DataGrid Looses Focus When Delete Key is Pressed

Répondre

1

Vous pouvez régler la mise au point DataGrid dans le PreviewKeyDown-Event

private void TheDataGrid_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Delete) 
    { 
     var grid = (DataGrid)sender; 
     FocusManager.SetFocusedElement(Window.GetWindow(grid), grid); //not tested 
    } 
} 

Si vous ne voulez pas mettre le code dans le code-behind utiliser AttachedProperties en combinaison avec le DependencyPropertyChanged-Event.
How to set set focus.

+0

Oui ... cela fonctionne bien, merci. Je trouve que je dois gérer Delete et Ctrl-X. En outre, je suis forcé de se concentrer sur MouseDown (pour la mise au point d'une grille vide) et sur ContextMenuClosing (pour la mise au point après avoir cliqué sur Couper/Supprimer). – Terrence

+1

J'ai parlé un peu trop tôt. PreviewKeyDown a l'inconvénient d'être appelé lors de la modification d'une cellule. Dans ces cas, il vole Focus à partir de la cellule. J'ai trouvé que la mise au point dans UnloadingRow fonctionne plutôt bien. – Terrence

0

Une solution pourrait être sale pour gérer l'événement LostFocus exposé par DataGrid et mise au point situé sur le contrôle.

On peut dire qu'il empiète marginalement sur le modèle MVVM, c'est-à-dire que la vue reste muette, mais c'est toujours le code de la vue.

Questions connexes