繁体   English   中英

在C#中向WPF TabItem添加“关闭标签”键绑定

[英]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类以及我的主窗口类没有任何运气。

我正在使用它作为参考:

WPF中的键盘快捷键

...但是我不太了解如何添加快捷方式。

我还没有真正测试过,但是也许不使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM