WPF中Insert Key的解释

Explanation of Insert Key in WPF

我试图在按下某些键时通知用户。如果按下 CapsNumScrollInsert,相对的 BarStaticItem(应用程序使用一些 devexpress 控件)将颜色更改为白色。

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);
        } 
    }
}

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

谁能解释一下为什么?

谢谢。

Insert 键由 TextBox 控件处理,因此事件不会向上路由 UI 元素树。

但是您可以为 PreviewKeyDown 事件附加处理程序而不是 KeyDown:

<Window ... PreviewKeyDown="DxMainWindow_KeyDown">

有关详细信息,请参阅 MSDN 上的 Routed Events Overview 文章。