2009-03-25 2 views
4

Dans ma base de données WPF, je capture la clé "delete", la traite, puis la grille de données elle-même supprime la ligne de l'interface utilisateur en continuant à gérer son propre gestionnaire pour la suppression (ce que je veux).Dans WPF, comment puis-je annuler la touche après l'avoir traitée avec PreviewKeyDown?

Mais maintenant, je veux CTRL-S pour ouvrir une barre de recherche, ce qu'il fait, mais il va aussi sur blanc la cellule l'utilisateur était quand il appuie sur CTRL-S, donc je suis à la recherche pour indiquer à la grille de données d'annuler la touche, appuyez sur afin qu'elle ne soit pas exécutée sur la grille de données. Comment puis-je annuler une pression de touche comme celle-ci?

XAML:

<toolkit:DataGrid x:Name="TheDataGrid" DockPanel.Dock="Bottom" 
        CanUserAddRows="False" 
        AlternatingRowBackground="#ddd" 
        CanUserSortColumns="true" 
        PreviewKeyDown="TheDataGrid_PreviewKeyDown" 
        AutoGenerateColumns="False" 
        RowEditEnding="TheDataGrid_RowEditEnding"> 

code-behind:

private void TheDataGrid_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.S)) 
    { 
     ShowSearchBar(); 
    } 

    switch (e.Key) 
    { 
     case Key.Delete: 
      DeleteCustomer(sender, e); 
      break; 
    } 
} 

Répondre

12
e.Handled = true; 
1

Dans une situation légèrement différente, j'ai un deuxième argument de type PreviewKeyDownEventArgs, situation dans laquelle la solution est:

e.IsInputKey = true;