# 如何在WPF中添加快捷键

最近在用wpf来开发界面,对于某些功能希望有快捷键,比如打开——Ctrl+O,保存Ctrl+S等,于是在网上搜索了一下,一般来说有两种方法,我只用了第一种。

  1. 前台页面实现

第一步,在xaml中输入一下代码


    <Window.Resources>
        <RoutedUICommand x:Key="OpenOneImage_Click" Text="OpenOneImage_Click"/>        
        <RoutedUICommand x:Key="save_Click" Text="save_Click"/>
    </Window.Resources>

第二步,添加输入绑定

<Window.InputBindings>
        <KeyBinding Gesture="Ctrl+O" Key="O"  Command="{StaticResource OpenOneImage_Click}"></KeyBinding>
        <KeyBinding Gesture="Ctrl+S" Key="S"  Command="{StaticResource save_Click}"></KeyBinding>        
    </Window.InputBindings>

第三步

<Window.CommandBindings>
        <CommandBinding Command="{StaticResource OpenOneImage_Click}" CanExecute="OpenOneImage_Click"></CommandBinding>
        <CommandBinding Command="{StaticResource save_Click}" CanExecute="save_Click"></CommandBinding>
    </Window.CommandBindings>

然后编译正常工程,打开界面,就可以使用快捷键了。

  1. 写控件或者窗体的KeyDown事件 :PreviewKeyDown=”Window_KeyDown”
private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {

                if (e.Key == Key.Enter)
                {
                    //搜索
                    if (Keyboard.FocusedElement != null && Keyboard.FocusedElement == SearchTxt) Search_Click(SearchBtn, e);
                    //文件或者文件夹重命名
                    if (Keyboard.FocusedElement != null && Keyboard.FocusedElement.GetType().Name == "TextBox")
                    {
                        TextBox box = Keyboard.FocusedElement as TextBox;
                        FilesModel model = box.DataContext as FilesModel;
                        if (model != null) ReName_LostFocus(box, e);
                    }

                    Keyboard.ClearFocus();
                }
                //Ctrl+C 全选
                if ((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) && e.KeyboardDevice.IsKeyDown(Key.C))
                {
                    if (Keyboard.FocusedElement != null && Keyboard.FocusedElement.GetType().Name == "TextBox") return;
                    CommandBinding_Copy(null, null);
                }

                //Ctrl+X 全选
                if ((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) && e.KeyboardDevice.IsKeyDown(Key.X))
                {
                    if (Keyboard.FocusedElement != null && Keyboard.FocusedElement.GetType().Name == "TextBox") return;
                    CommandBinding_Cut(null, null);
                }
                //Ctrl+V 全选
                if ((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) && e.KeyboardDevice.IsKeyDown(Key.V))
                {
                    if (Keyboard.FocusedElement != null && Keyboard.FocusedElement.GetType().Name == "TextBox") return;
                    CommandBinding_Paste(null, null);
                }

                //Ctrl+A 全选
                if ((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) && e.KeyboardDevice.IsKeyDown(Key.A))
                {
                    SelectAllCheck.IsChecked = true;
                    SelectAll_Click(SelectAllCheck, e);
                }
                //Shift+D 删除
                if ((e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift)) && e.KeyboardDevice.IsKeyDown(Key.Delete))
                {
                    DeleteBtn_Click(null, e);
                }
            }
            catch (Exception)
            {
            }

        }

方法2没有实践,有需要的可以实践下。
以上参考了这篇blog:

可以直接点击跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值