簡體   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