最近在用wpf来开发界面,对于某些功能希望有快捷键,比如打开——Ctrl+O,保存Ctrl+S等,于是在网上搜索了一下,一般来说有两种方法,我只用了第一种。
- 前台页面实现
第一步,在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>
然后编译正常工程,打开界面,就可以使用快捷键了。
- 写控件或者窗体的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: