# 如何在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:

可以直接点击跳转

要在 WPF 用户控件添加复制粘贴本控件的功能,可以参考以下步骤: 1. 在用户控件的 XAML 文件,为控件添加一个命令绑定,例如: ``` <UserControl x:Class="MyUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyNamespace"> <UserControl.CommandBindings> <CommandBinding Command="local:MyCommands.Copy" Executed="CopyExecuted" /> <CommandBinding Command="local:MyCommands.Paste" Executed="PasteExecuted" /> </UserControl.CommandBindings> <!-- 控件的其他 XAML 布局 --> </UserControl> ``` 这里我们为控件添加了两个自定义命令绑定,一个是复制命令,一个是粘贴命令,它们的命令类型均为 local:MyCommands。 2. 创建自定义命令类型 MyCommands,并在命令类型定义命令的名称和默认快捷键,例如: ``` public static class MyCommands { public static RoutedCommand Copy = new RoutedCommand("Copy", typeof(MyCommands), new InputGestureCollection(new InputGesture[] { new KeyGesture(Key.C, ModifierKeys.Control) })); public static RoutedCommand Paste = new RoutedCommand("Paste", typeof(MyCommands), new InputGestureCollection(new InputGesture[] { new KeyGesture(Key.V, ModifierKeys.Control) })); } ``` 这里我们定义了两个命令,分别是 Copy 和 Paste,它们的默认快捷键分别为 Ctrl+C 和 Ctrl+V。 3. 在代码文件,实现复制和粘贴命令的执行方法: ``` public partial class MyUserControl : UserControl { // 复制命令的执行方法 private void CopyExecuted(object sender, ExecutedRoutedEventArgs e) { Clipboard.SetText("这里是要复制的文本"); } // 粘贴命令的执行方法 private void PasteExecuted(object sender, ExecutedRoutedEventArgs e) { string text = Clipboard.GetText(); // 处理粘贴的文本 } } ``` 注意,这里我们只是简单地在复制命令将一个文本放入剪贴板,而在粘贴命令获取剪贴板的文本并进行处理。实际应用,你需要根据具体的情况来实现复制和粘贴的逻辑。 4. 最后,在用户控件的 XAML 文件,为需要添加复制粘贴功能的控件指定这些命令的绑定,例如: ``` <TextBox Text="这是一个需要添加复制粘贴功能的文本框" local:MyUserControl.CommandBindings="{Binding ElementName=myUserControl, Path=CommandBindings}" /> ``` 这里我们将用户控件定义的命令绑定绑定到了一个文本框上,这样在文本框就可以使用复制和粘贴本控件的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值