WPF e.Systemkey的一个坑

来源:互联网 发布:mac flamingo口红 编辑:程序博客网 时间:2024/05/01 15:27

当用代码去控制按键盘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之后,再按数字键第一次是没反应的,第二次就有反应了,也是醉了。

0 0
原创粉丝点击