添加"关闭标签"在C#中键入绑定到WPF TabItem

时间:2014-03-21 18:14:03

标签: c# wpf tabcontrol key-bindings

我已经实现了这个修改后的TabItem来添加"关闭"按钮到WPF TabControl的每个选项卡:

http://www.codeproject.com/Articles/281402/Closable-TabItem-in-WPF

一切都运行良好,但我无法弄清楚如何为Ctrl + W添加KeyBinding作为关闭标签的替代方式。我已经尝试过添加到CloseTab.cs类以及我的主窗口类而没有运气。

我用这个作为参考:

Keyboard shortcuts in WPF

...但我真的不明白如何添加快捷方式。

1 个答案:

答案 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)); 命令挂钩。您可能必须单击选项卡或选项卡区域以使其成为焦点,以使键绑定起作用。我注意到在测试期间。