2010-05-14 3 views
0

Dans l'exigence de l'application est la suivante .. Dans la page enfant Silverlight (Usercontrol, lorsque vous cliquez sur l'élément de menu) page ouverte, il faut remplir des données puis pour enregistrer, nous avons le bouton Enregistrer pour l'annuler nous avons le bouton Annuler. Ici, je cherche des données d'économie que j'ai besoin d'utiliser les touches de raccourci (Ctrl + S). Si j'écris le code suivant dans l'événement KeyDown il ne fonctionne pas bien, car Généralement, nous frappons la touche 'Ctrl' en mode pressé, puis nous frappons la touche "S" ici si je frappe la touche 'Ctrl' n'est pas libérée alors il ne fonctionne pas .. Autrement dit. si punch "Ctrl" puis relâchez-le alors coup de poing "S" il fonctionne très bien ..Appliquer les touches de raccourci à Silverlight page

code // // int count = 0; - override global --- protégé vide OnKeyDown (KeyEventArgs e) { base.OnKeyDown (e);

 if (e.Key == Key.Ctrl) 
     { 
      count = 1; 

     } 
     string str = e.Key.ToString(); 
     if (count >0 && str == "S") 
     { 
      //MessageBox.Show("Saved"); 
      //Saving the data 
      count = 0; 
     } 

    } 

Je cherche cela fonctionne sur
Avec la touche "Ctrl" est en mode emboutie

s'il vous plaît examiner cette question ...

Merci

Répondre

0

Le code suivant apparaît à fonctionne bien, mais il semble que l'événement ne sera pas déclenché du tout à moins qu'il n'y ait des contrôles d'entrée sur la page, tels que des zones de texte, etc.

public partial class MainPage : UserControl 
{ 
    private bool _CtrlPressed; 

    public MainPage() 
    { 
     InitializeComponent(); 

     LayoutRoot.KeyDown += new KeyEventHandler(LayoutRoot_KeyDown); 
     LayoutRoot.KeyUp += new KeyEventHandler(LayoutRoot_KeyUp); 
    } 

    void LayoutRoot_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Ctrl) 
      _CtrlPressed = true; 
    } 

    void LayoutRoot_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Ctrl) 
      _CtrlPressed = false; 

     if (e.Key == Key.S && _CtrlPressed) 
     { 
      Debug.WriteLine("Ctrl + S was pressed"); 
      //Execute save operation 
     } 
    } 
} 
4

Utilisez Keyboard.Modifiers pour vérifier l'état du bouton Ctrl. exemple grossier:

if (e.Key == Key.S && Keyboard.Modifiers == ModifierKeys.Ctrl) 
    { 
     //MessageBox.Show("Saved"); 
     //Saving the data 
    }; 
+0

+1 avec une argutie: le 'Modifiers' ENUM est "Flags", donc je crois que vous auriez besoin d'utiliser un opérateur de bits:' (Keyboard.Modifiers & ModifierKeys.Ctrl) == ModifierKeys.Ctrl' – McGarnagle

Questions connexes