Far*_*ver 66 wpf tabs key-bindings ctrl
什么样的代码会捕获WPF应用程序的Ctrl+ Tab和Ctrl+ Shift+ Tab?
我们已经创建了KeyDown事件,并尝试使用输入手势添加命令绑定,但我们永远无法捕获这两个快捷方式.
Szy*_*zga 93
你有什么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");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 31
古斯塔沃的回答正是我所寻找的.我们想验证输入密钥,但仍然允许粘贴:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
return;
}
Run Code Online (Sandbox Code Playgroud)
你必须使用KeyUp事件,而不是KeyDown......
Szymon Rozga答案的工作版本(抱歉,我无法发表评论)。我们不看Alt,但它的会计可以首先简单地添加,如果
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");
}
}
Run Code Online (Sandbox Code Playgroud)