当用代码去控制按键盘F10按钮的时候,切换TabControl的标签页,然后再按其余的键盘键,无法响应
原因就是这个systemkey,是因为F10为系统的按键,用e.key==key.f10是无效的,只能用systemkey,那么问题来了,
一旦用了这个systemkey之后后续的键盘消息,previewkeydown是收不到的,不管设置什么焦点都没用。
最后加上了一句e.handle=true;即可解决,大致意思为:我已经处理完了,系统别再搞其他事情了
附上代码:
xmal:
<Grid Name="grid1">
<TabControl Name="tab"></TabControl>
<Label Height="50" Width="500" Name="lab" Background="BlanchedAlmond" Content="1"></Label>
</Grid>
.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
init_tab();
PreviewKeyDown += (sender, e) =>
{
if (e.SystemKey == Key.F10)
{
tab.SelectedIndex = 3;
e.Handled = true;
}
if (e.Key == Key.F5)
{
lab.Content = lab.Content + "2";
}
};
}
public void init_tab()
{
TabItem item1 = new TabItem() { Header = "0", Content = "11111111" };
TabItem item2 = new TabItem() { Header = "1", Content = "22222222" };
TabItem item3 = new TabItem() { Header = "2", Content = "33333333" };
TabItem item4 = new TabItem() { Header = "3", Content = "44444444" };
tab.Items.Add(item1);
tab.Items.Add(item2);
tab.Items.Add(item3);
tab.Items.Add(item4);
}
}
总结:估计是系统做了些其他乱七八糟的处理,导致键盘消息无法接受,但是有个很奇怪的现象,
按数字键是可以接收到的,即按了F10之后,再按数字键第一次是没反应的,第二次就有反应了,也是醉了。