KeyDown事件按下按钮后退出工作

问题描述:

我有一个使用WPF的c#程序。我有,当你按下一个键,它会点击一个按钮,然后禁用该按钮。我的问题是,一旦我决定点击一个按钮,keyDown事件不再被执行。我错过了什么吗?KeyDown事件按下按钮后退出工作

namespace FindTheCat 
{ 
    public partial class MainWindow : Window 
    { 
     private Treasure treas; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void checkForKitty(object sender, RoutedEventArgs e) 
     { 
      ToggleButton button = (ToggleButton)e.OriginalSource; 

      if(button != null) 
      { 
       button.IsEnabled = false; 

       int loc = getLocation((String)button.Content); 

       if (loc > 0) 
       { 
        isFound(loc); 
       } 
      } 
     } 

     private void checkKey(object sender, KeyEventArgs e) 
     { 
      ToggleButton item = (ToggleButton)GridRoot.FindName(e.Key.ToString()); 
      if (item != null) 
      { 
       item.IsEnabled = false; 
       int loc = getLocation(e.Key.ToString()); 

       if (loc > 0) 
       { 
        isFound(loc); 
       } 
      } 

      MessageBox.Show("Key Pressed"); 
     } 

     private void isFound(int loc) 
     { 
      Boolean found = treas.isFound(loc); 

      if (found) 
      { 
       MessageBox.Show("YAY! You found the cat!"); 
       Reset(); 
      } 
      else 
      { 
       MessageBox.Show("Boo! You did not find the cat!"); 
      } 
     } 

     private int getLocation(String letter) 
     { 
      switch (letter) 
      { 
       case "A": 
        return 1; 
       case "B": 
        return 2; 
       case "C": 
        return 3; 
       case "D": 
        return 4; 
       case "E": 
        return 5; 
       case "F": 
        return 6; 
       case "G": 
        return 7; 
       case "H": 
        return 8; 
       case "I": 
        return 9; 
       case "J": 
        return 10; 
       case "K": 
        return 11; 
       case "L": 
        return 12; 
       case "M": 
        return 13; 
       case "N": 
        return 14; 
       case "O": 
        return 15; 
       case "P": 
        return 16; 
       case "Q": 
        return 17; 
       case "R": 
        return 18; 
       case "S": 
        return 19; 
       case "T": 
        return 20; 
       case "U": 
        return 21; 
       case "V": 
        return 22; 
       case "W": 
        return 23; 
       case "X": 
        return 24; 
       case "Y": 
        return 25; 
       default: 
        return 0; 
      } 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      treas = new Treasure(); 
     } 

     private void Reset() 
     { 
      treas.Reset(); 

      ResetButton("A"); 
      ResetButton("B"); 
      ResetButton("C"); 
      ResetButton("D"); 
      ResetButton("E"); 
      ResetButton("F"); 
      ResetButton("G"); 
      ResetButton("H"); 
      ResetButton("I"); 
      ResetButton("J"); 
      ResetButton("K"); 
      ResetButton("L"); 
      ResetButton("M"); 
      ResetButton("N"); 
      ResetButton("O"); 
      ResetButton("P"); 
      ResetButton("Q"); 
      ResetButton("R"); 
      ResetButton("S"); 
      ResetButton("T"); 
      ResetButton("U"); 
      ResetButton("V"); 
      ResetButton("W"); 
      ResetButton("X"); 
      ResetButton("Y"); 
     } 

     private void ResetButton(String name) 
     { 
      ToggleButton item = (ToggleButton)GridRoot.FindName(name); 

      if (item != null) 
      { 
       item.IsEnabled = true; 
       item.IsChecked = false; 
      } 
     } 
    } 
} 
+3

请添加一些代码来获得答案 – Jehof 2012-03-30 13:07:01

+2

是的,你错过了代码:) – ABH 2012-03-30 13:10:09

禁用的控件不能拥有键盘焦点。所以它不会得到任何关键事件。

+0

谢谢。我只需要将焦点改回主窗口,它就可以工作 – 2012-03-30 13:35:52