如何在UI中按下组合键显示按钮

时间:2015-08-09 02:16:12

标签: c# wpf button keyboard

实际上这篇文章与this不同(我也发布)。我的UI中有一个电话键盘,现在我可以在按下相应的按键时显示按钮被按下。

private void NumDisplayBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
  switch (e.Key) 
  {
    case Key.D0:
    case Key.NumPad0:
      ZeroBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D1:
    case Key.NumPad1:
      OneBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D2:
    case Key.NumPad2:
      TwoBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D3:
    case Key.NumPad3:
      ThreeBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D4:
    case Key.NumPad4:
      FourBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D5:
    case Key.NumPad5:
      FiveBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D6:
    case Key.NumPad6:
      SixBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D7:
    case Key.NumPad7:
      SevenBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D8:
    case Key.NumPad8:
      EightBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
    case Key.D9:
    case Key.NumPad9:
      NineBtn.Style = (Style) FindResource("PressedButtonStyle");
      break;
  }

  if (((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift))
  {
    if (e.Key == Key.D3)
    {
      ThreeBtn.Style = (Style)FindResource("NormalButtonStyle");
      HashBtn.Style = (Style)FindResource("PressedButtonStyle");
    }
  }
}

private void NumDisplayBox_PreviewKeyUp(object sender, KeyEventArgs e) 
{
  switch (e.Key) 
  {
    case Key.D0:
    case Key.NumPad0:
      ZeroBtn.Style = (Style) FindResource("ButtonStyle4"); break;
    case Key.D1:
    case Key.NumPad1:
      OneBtn.Style = (Style) FindResource("ButtonStyle4"); break;

    .
    .
    .
  }
}

问题是当哈希键(Shift + 3)或星号键(Shift + 8)关闭时,也会在UI中按下“3”按钮(用于大小写哈希键)。如何在Shift + 3关闭时仅显示用户界面上的哈希按钮,而不是哈希按钮和“3”按钮?

2 个答案:

答案 0 :(得分:0)

检查KeyEventArgs.Modifiers属性,仅在未设置修饰符的情况下处理键。

或者,使用TextInputPreviewTextInput事件来获取撰写的文本而不是实际的密钥。无论如何,这可能是优选的,因为它将响应任何输入适当文本输入的方法,而不是依赖于特定的键(例如,您不必拥有所有可能键的情况,例如正如您现在所做的那样,顶行数字键和数字键盘键。

答案 1 :(得分:0)

这对我有用:

//Make the button to have "pressed" feel when the corresponding key is pressed

private void NumDisplayBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{
    if (((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift))
    {
      if (e.Key == Key.D3)
        HashBtn.Style = (Style) FindResource("PressedButtonStyle");

      if (e.Key == Key.D8)
        StarBtn.Style = (Style) FindResource("PressedButtonStyle");
    }

    switch (e.Key) 
    {
      case Key.D0:
      case Key.NumPad0:
        ZeroBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D1:
      case Key.NumPad1:
        OneBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D2:
      case Key.NumPad2:
        TwoBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D3:
      case Key.NumPad3:
        {
          if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
            ThreeBtn.Style = (Style) FindResource("ButtonStyle4");

          else
            ThreeBtn.Style = (Style) FindResource("PressedButtonStyle");

          break;
        }
      case Key.D4:
      case Key.NumPad4:
        FourBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D5:
      case Key.NumPad5:
        FiveBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D6:
      case Key.NumPad6:
        SixBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D7:
      case Key.NumPad7:
        SevenBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      case Key.D8:
      case Key.NumPad8:
        {
          if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
            EightBtn.Style = (Style) FindResource("ButtonStyle4");

          else
            EightBtn.Style = (Style) FindResource("PressedButtonStyle");

          break;
        }
      case Key.D9:
      case Key.NumPad9:
        NineBtn.Style = (Style) FindResource("PressedButtonStyle");
        break;
      default:
        break;
    }
}

//Return back to its original style

private void NumDisplayBox_PreviewKeyUp(object sender, KeyEventArgs e)
{
  switch (e.Key) 
  {
    case Key.D0:
    case Key.NumPad0:
      ZeroBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D1:
    case Key.NumPad1:
      OneBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D2:
    case Key.NumPad2:
      TwoBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D3:
    case Key.NumPad3:
      ThreeBtn.Style = (Style) FindResource("ButtonStyle4");
      HashBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D4:
    case Key.NumPad4:
      FourBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D5:
    case Key.NumPad5:
      FiveBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D6:
    case Key.NumPad6:
      SixBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D7:
    case Key.NumPad7:
      SevenBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D8:
    case Key.NumPad8:
      EightBtn.Style = (Style) FindResource("ButtonStyle4");
      StarBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    case Key.D9:
    case Key.NumPad9:
      NineBtn.Style = (Style) FindResource("ButtonStyle4");
      break;
    default:
      break;
  }
}