diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs index b2f02a71..03986c13 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs @@ -119,6 +119,15 @@ public class TabControl : System.Windows.Controls.TabControl set => SetValue(ShowContextMenuProperty, ValueBoxes.BooleanBox(value)); } + public static readonly DependencyProperty CanBeClosedByMiddleButtonProperty = + DependencyProperty.Register("CanBeClosedByMiddleButton", typeof(bool), typeof(TabControl), new PropertyMetadata(ValueBoxes.TrueBox)); + + public bool CanBeClosedByMiddleButton + { + get => (bool) GetValue(CanBeClosedByMiddleButtonProperty); + set => SetValue(CanBeClosedByMiddleButtonProperty, ValueBoxes.BooleanBox(value)); + } + /// /// 是否将标签填充 /// diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs index b045b7dc..1f1cd33b 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs @@ -242,10 +242,11 @@ public class TabItem : System.Windows.Controls.TabItem public TabItem() { CommandBindings.Add(new CommandBinding(ControlCommands.Close, (s, e) => Close())); - CommandBindings.Add(new CommandBinding(ControlCommands.CloseAll, - (s, e) => { TabControlParent.CloseAllItems(); })); - CommandBindings.Add(new CommandBinding(ControlCommands.CloseOther, - (s, e) => { TabControlParent.CloseOtherItems(this); })); + CommandBindings.Add(new CommandBinding(ControlCommands.CloseAll, (s, e) => TabControlParent.CloseAllItems())); + CommandBindings.Add(new CommandBinding( + ControlCommands.CloseOther, + (s, e) => TabControlParent.CloseOtherItems(this), + (s, e) => e.CanExecute = TabControlParent.Items.Count > 1)); Loaded += (s, e) => OnMenuChanged(Menu); } @@ -389,7 +390,8 @@ public class TabItem : System.Windows.Controls.TabItem protected override void OnMouseDown(MouseButtonEventArgs e) { - if (e.ChangedButton == MouseButton.Middle && e.ButtonState == MouseButtonState.Pressed) + if (e is { ChangedButton: MouseButton.Middle, ButtonState: MouseButtonState.Pressed } && + TabControlParent.CanBeClosedByMiddleButton) { if (ShowCloseButton || ShowContextMenu) {