[英]Adding “close tab” keybinding to WPF TabItem in C#
我已经实现了此修改过的TabItem,以向WPF TabControl的每个选项卡添加“关闭”按钮:
http://www.codeproject.com/Articles/281402/Closable-TabItem-in-WPF
一切工作都很好,但是我一生都无法解决如何为Ctrl + W添加KeyBinding来作为关闭选项卡的另一种方式。 我尝试添加到CloseTab.cs类以及我的主窗口类没有任何运气。
我正在使用它作为参考:
...但是我不太了解如何添加快捷方式。
我还没有真正测试过,但是也许不使用InputGestures
(因为我想您不能InputGestures
正常工作),也许您可以绑定到命令并检查Keyboard
上当前按下的键吗?
因此,在定义ClosableTabItem
的xaml中:
(您需要添加对System.Windows.Interactivity
的引用)
xmlns:local="clr-namespace:TestDemo"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<local:ClosableTabItem Header="TabItem 1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<i:InvokeCommandAction Command="{Binding KeyDownCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</local:ClosableTabItem>
然后命令:
private RelayCommand _KeyDownCommand;
public ICommand KeyDownCommand
{
get
{
if (this._KeyDownCommand == null)
this._KeyDownCommand = new RelayCommand(param => this.CheckKeysDown());
return this._KeyDownCommand;
}
}
和方法:
private void CheckKeysDown()
{
if (Keyboard.IsKeyDown(Key.W) && ((Keyboard.Modifiers & ModifierKeys.Control) > 0))
{
// Ctrl + W was pressed
}
}
编辑:为了扩大我的答案,我也发现了这个非常有用的实现: http : //joyfulwpf.blogspot.com/2009/05/mvvm-commandreference-and-keybinding.html
您可以在上述链接的实现中使用CommandReference
在满足KeyBinding
时执行!
EDIT2:为此,请在后面的代码中(对于动态添加的标签项):
System.Windows.Interactivity.EventTrigger trigger =
new System.Windows.Interactivity.EventTrigger();
trigger.EventName = "KeyDown";
System.Windows.Interactivity.InvokeCommandAction keyDownAction =
new System.Windows.Interactivity.InvokeCommandAction();
keyDownAction.Command = KeyDownCommand;
trigger.Actions.Add(keyDownAction);
trigger.Attach(yourTabItem);
EDIT3:好的,我自己得到了代码,然后四处寻找解决方法。 ClosableTabItem
类删除选项卡的方式是使用StateChange
命令。 我只是将KeyBinding
添加到了我在后面的代码中创建的选项卡项中,并且它起作用了。
所以我这样做:
ClosableTabItem myTab = new ClosableTabItem();
myTab.InputBindings.Add(new KeyBinding(ClosableTabItem.StateChange, Key.W, ModifierKeys.Control));
因此,当您动态创建选项卡时,请在上方添加此输入绑定,并将其连接到StateChange
命令。 您可能必须单击选项卡或选项卡区域才能使其聚焦,才能使键绑定生效。 我在测试期间注意到了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.