WPF中Insert Key的解释
Explanation of Insert Key in WPF
我试图在按下某些键时通知用户。如果按下 Caps
、Num
、Scroll
和 Insert
,相对的 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 文章。
我试图在按下某些键时通知用户。如果按下 Caps
、Num
、Scroll
和 Insert
,相对的 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 文章。