@@ -358,7 +358,49 @@ public partial class Tab : IHandlerException
358358 /// </summary>
359359 [ Parameter ]
360360 public string ? CloseTabNavLinkTooltipText { get ; set ; }
361+
362+ /// <summary>
363+ /// Gets or sets whether enable tab context menu. Default is false.
364+ /// </summary>
365+ [ Parameter ]
366+ public bool ShowContextMenu { get ; set ; }
367+
368+ /// <summary>
369+ /// Gets or sets the template of before context menu. Default is null.
370+ /// </summary>
371+ [ Parameter ]
372+ public RenderFragment < Tab > ? BeforeContextMenuTemplate { get ; set ; }
373+
374+ /// <summary>
375+ /// Gets or sets the template of context menu. Default is null.
376+ /// </summary>
377+ [ Parameter ]
378+ public RenderFragment < Tab > ? ContextMenuTemplate { get ; set ; }
379+
380+ /// <summary>
381+ /// Gets or sets the icon of tab item context menu refresh button. Default is null.
382+ /// </summary>
383+ [ Parameter ]
384+ public string ? ContextMenuRefreshIcon { get ; set ; }
385+
386+ /// <summary>
387+ /// Gets or sets the icon of tab item context menu close button. Default is null.
388+ /// </summary>
389+ [ Parameter ]
390+ public string ? ContextMenuCloseIcon { get ; set ; }
361391
392+ /// <summary>
393+ /// Gets or sets the icon of tab item context menu close other button. Default is null.
394+ /// </summary>
395+ [ Parameter ]
396+ public string ? ContextMenuCloseOtherIcon { get ; set ; }
397+
398+ /// <summary>
399+ /// Gets or sets the icon of tab item context menu close all button. Default is null.
400+ /// </summary>
401+ [ Parameter ]
402+ public string ? ContextMenuCloseAllIcon { get ; set ; }
403+
362404 [ CascadingParameter ]
363405 private Layout ? Layout { get ; set ; }
364406
@@ -384,10 +426,9 @@ public partial class Tab : IHandlerException
384426
385427 [ Inject , NotNull ]
386428 private DialogService ? DialogService { get ; set ; }
387-
388- [ CascadingParameter ]
389- private ContextMenuZone ? ContextMenuZone { get ; set ; }
390-
429+
430+ private ContextMenuZone ? _contextMenuZone ;
431+
391432 private ConcurrentDictionary < TabItem , bool > LazyTabCache { get ; } = new ( ) ;
392433
393434 private bool HandlerNavigation { get ; set ; }
@@ -400,7 +441,7 @@ public partial class Tab : IHandlerException
400441
401442 private readonly ConcurrentDictionary < TabItem , TabItemContent > _cache = [ ] ;
402443
403- private bool IsPreventDefault => ContextMenuZone != null ;
444+ private bool IsPreventDefault => _contextMenuZone != null ;
404445
405446 /// <summary>
406447 /// <inheritdoc/>
@@ -439,6 +480,11 @@ protected override void OnParametersSet()
439480 CloseIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TabCloseIcon ) ;
440481 RefreshToolbarButtonIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TabRefreshButtonIcon ) ;
441482
483+ ContextMenuRefreshIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TabContextMenuRefreshIcon ) ;
484+ ContextMenuCloseIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TabContextMenuCloseIcon ) ;
485+ ContextMenuCloseOtherIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TabContextMenuCloseOtherIcon ) ;
486+ ContextMenuCloseAllIcon ??= IconTheme . GetIconByKey ( ComponentIcons . TabContextMenuCloseAllIcon ) ;
487+
442488 if ( AdditionalAssemblies is null )
443489 {
444490 var entryAssembly = Assembly . GetEntryAssembly ( ) ;
@@ -989,6 +1035,38 @@ public async Task Refresh(TabItem item)
9891035 await OnToolbarRefreshCallback ( ) ;
9901036 }
9911037 }
1038+
1039+ private async Task OnRefresh ( ContextMenuItem item , object ? context )
1040+ {
1041+ if ( context is TabItem tabItem )
1042+ {
1043+ await Refresh ( tabItem ) ;
1044+ }
1045+ }
1046+
1047+ private async Task OnClose ( ContextMenuItem item , object ? context )
1048+ {
1049+ if ( context is TabItem tabItem )
1050+ {
1051+ await RemoveTab ( tabItem ) ;
1052+ }
1053+ }
1054+
1055+ private Task OnCloseOther ( ContextMenuItem item , object ? context )
1056+ {
1057+ if ( context is TabItem tabItem )
1058+ {
1059+ ActiveTab ( tabItem ) ;
1060+ }
1061+ CloseOtherTabs ( ) ;
1062+ return Task . CompletedTask ;
1063+ }
1064+
1065+ private Task OnCloseAll ( ContextMenuItem item , object ? context )
1066+ {
1067+ CloseAllTabs ( ) ;
1068+ return Task . CompletedTask ;
1069+ }
9921070
9931071 /// <summary>
9941072 /// <inheritdoc/>
@@ -1006,9 +1084,9 @@ protected override async ValueTask DisposeAsync(bool disposing)
10061084
10071085 private async Task OnContextMenu ( MouseEventArgs e , TabItem item )
10081086 {
1009- if ( ContextMenuZone != null )
1087+ if ( _contextMenuZone != null )
10101088 {
1011- await ContextMenuZone . OnContextMenu ( e , item ) ;
1089+ await _contextMenuZone . OnContextMenu ( e , item ) ;
10121090 }
10131091 }
10141092}
0 commit comments