[英]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.