【发布时间】:2010-10-23 05:44:52
【问题描述】:
哪些示例代码会捕获 Ctrl+Tab 和 Ctrl+Shift+Tab?
我们已经创建了KeyDown 事件,还尝试使用输入手势添加命令绑定,但我们始终无法捕获这两个快捷方式。
【问题讨论】:
标签: wpf tabs key-bindings ctrl
哪些示例代码会捕获 Ctrl+Tab 和 Ctrl+Shift+Tab?
我们已经创建了KeyDown 事件,还尝试使用输入手势添加命令绑定,但我们始终无法捕获这两个快捷方式。
【问题讨论】:
标签: wpf tabs key-bindings ctrl
你有什么 KeyDown 处理程序?下面的代码对我有用。给我带来麻烦的是:Alt + Tab,但你没有要求:D
public Window1()
{
InitializeComponent();
AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}
private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
{
MessageBox.Show("CTRL + SHIFT + TAB trapped");
}
if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
MessageBox.Show("CTRL + TAB trapped");
}
}
【讨论】:
Keyboard.Modifiers.HasFlag(ModifierKeys.Control)
(Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift) 也捕获了 Ctrl+Shift+Alt,所以对我来说使用(Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Shift)) 似乎更好
Gustavo 的答案正是我想要的。我们想要验证输入键,但仍然允许粘贴:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
return;
}
【讨论】:
您必须使用 KeyUp 事件,而不是 KeyDown...
【讨论】:
Szymon Rozga 答案的工作版本(抱歉,我无法发表评论)。我们不看Alt,但是一开始可以简单地添加它的会计if
public View()
{
InitializeComponent();
AddHandler(Keyboard.PreviewKeyDownEvent, (KeyEventHandler)controlKeyDownEvent);
}
private void controlKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
{
if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
MessageBox.Show("CTRL + SHIFT + TAB trapped");
else
MessageBox.Show("CTRL + TAB trapped");
}
}
【讨论】:
您好,您可以在 keydown 事件中使用它
private void OnButtonKeyDown(object sender, KeyEventArgs e)
{
if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
{
//
// TODO: somthing here
//
}
}
【讨论】: