TabControl: Add (opt-in) navigation panel and custom header content#4026
Open
nicolaihenriksen wants to merge 13 commits intomasterfrom
Open
TabControl: Add (opt-in) navigation panel and custom header content#4026nicolaihenriksen wants to merge 13 commits intomasterfrom
nicolaihenriksen wants to merge 13 commits intomasterfrom
Conversation
Navigation buttons still need to take "disabled" tabs into account
Keboo
approved these changes
Mar 29, 2026
BringIntoView direction is now dependent on the nav panel behavior. For scroll behavior, the current scroll position compared to the "next" tab determines the direction, whereas for select behavior, it is simply the index of the "next" tab that needs to be considered.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Fixes #3977
This PR introduces 2 new features to the (horizontal)
TabControlstyles of MDIX:The first feature, marked in$${\color{red}red}$$ , is the ability to turn on a navigation panel which becomes visible when the tabs overflow the available screen real-estate.
The second feature, marked in$${\color{green}green}$$ , is the ability to add custom header content to the right of the last visible tab. If the tabs are overflowing, it will sit next to the neighboring element (or window border in many/most cases).
UniformGrid style
VirtualizingStackPanel style
Navigation panel
The navigation panel can be enabled (only visible when overflowing) by adding the following AP at the call site:
By default, the overflow buttons center vertically, but there is a "hook" built in which can be used to tweak this positioning to your liking. In case you want them to align with the bottom of a custom header content button, you could add the following:
Navigation panel placement
The placement of the navigation panel can be controlled by
TabAssist.NavigationPanelPlacementattached property. This allows the buttons to be "split" (previous on the left side, and next on the right side; this is the default), or place both buttons on either the left or right side.Navigation panel behavior
The behavior of the navigationpanel can be controlled by
TabAssist.NavigationPanelBehaviorattached property. This allows the navigation buttons to either scroll (a page) in either direction (this is the default), or select the next/previous (enabled) tab.Custom header panel content
Custom content can be added to the right of the last visible tab by setting the
TabAssist.HeaderPanelCustomContentattached property:This example simply shows a button which could be used to add a new tab. Another use case for the custom content could be a drop-down menu giving (easy) access to all the available tabs. The
TabAssist.IsOverflowingread-only attached property could be leveraged to control the visibility of this button: