我已经实现了这个修改后的TabItem来添加"关闭"按钮到WPF TabControl的每个选项卡:
http://www.codeproject.com/Articles/281402/Closable-TabItem-in-WPF
一切都运行良好,但我无法弄清楚如何为Ctrl + W添加KeyBinding作为关闭标签的替代方式。我已经尝试过添加到CloseTab.cs类以及我的主窗口类而没有运气。
我用这个作为参考:
...但我真的不明白如何添加快捷方式。
答案 0 :(得分:1)
我还没有真正测试过这个,但也许不是使用InputGestures
(因为你猜不到这个工作),也许你可以选择绑定命令并检查{{1}对于当前按下的键?
因此在定义Keyboard
的xaml中:
(您需要添加对ClosableTabItem
)的引用
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;
}
}
编辑:为了扩展我的答案,我发现这个非常有用的实现: http://joyfulwpf.blogspot.com/2009/05/mvvm-commandreference-and-keybinding.html
您可以在上述链接的实现中使用private void CheckKeysDown()
{
if (Keyboard.IsKeyDown(Key.W) && ((Keyboard.Modifiers & ModifierKeys.Control) > 0))
{
// Ctrl + W was pressed
}
}
,以便在满足CommandReference
时执行!
EDIT2:要在后面的代码中执行此操作(对于动态添加的标签项):
KeyBinding
EDIT3:好的,我只是自己编写代码并玩弄了解你的问题。 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);
类删除选项卡的方式是使用命令ClosableTabItem
。我只是在我后面的代码中创建的标签项中添加了一个StateChange
,它起作用了。
所以我这样做了:
KeyBinding
因此,当您动态创建选项卡时,请在上面添加此输入绑定,并使其与ClosableTabItem myTab = new ClosableTabItem();
myTab.InputBindings.Add(new KeyBinding(ClosableTabItem.StateChange, Key.W, ModifierKeys.Control));
命令挂钩。您可能必须单击选项卡或选项卡区域以使其成为焦点,以使键绑定起作用。我注意到在测试期间。