在WPF中插入密钥的说明

问题描述:

我试图在按下某些密钥时通知用户。如果按下Caps,Num,ScrollInsert,则相对应的BarStaticItem(应用程序使用一些devexpress控件)会将颜色更改为白色。在WPF中插入密钥的说明

void DxMainWindow_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.CapsLock) 
    { 

     if (e.KeyboardDevice.IsKeyToggled(Key.CapsLock)) 
     { 
      bCaps.Tag = new SolidColorBrush(Colors.White); 
     } 
     else 
     { 
      bCaps.Tag = new SolidColorBrush(Colors.DarkGray); 
     } 
    } 

    if (e.Key == Key.NumLock) 
    { 
     if (e.KeyboardDevice.IsKeyToggled(Key.NumLock)) 
     { 
      bNum.Tag = new SolidColorBrush(Colors.White); 
     } 
     else 
     { 
      bNum.Tag = new SolidColorBrush(Colors.DarkGray); 
     } 
    } 

    if (e.Key == Key.Scroll) 
    { 
     if (e.KeyboardDevice.IsKeyToggled(Key.Scroll)) 
     { 
      bScrl.Tag = new SolidColorBrush(Colors.White); 
     } 
     else 
     { 
      bScrl.Tag = new SolidColorBrush(Colors.DarkGray); 
     } 
    } 

    if (e.Key == Key.Insert) 
    { 
     if (e.KeyboardDevice.IsKeyToggled(Key.Insert)) 
     { 
      bIns.Tag = new SolidColorBrush(Colors.White); 
     } 
     else 
     { 
      bIns.Tag = new SolidColorBrush(Colors.DarkGray); 
     } 
    } 
} 

一切工作正常,但是当我按下Insert一个TextBox里面不起作用。奇怪的是,在其他KeyEvents的纠纷中,Insert事件就像从未发生过(断点不会中断),即使功能正常工作(按下时覆盖文本等)。

有人可以解释我为什么吗?

谢谢。

Insert键由TextBox控件处理,以便事件不会路由到UI元素树。

你可以附上但是一个处理程序PreviewKeyDown事件,而不是KeyDown

<Window ... PreviewKeyDown="DxMainWindow_KeyDown"> 

请参阅MSDN上的Routed Events Overview文章的更多细节。

+0

非常感谢。就是这样。 – 2015-04-06 07:35:40