public static void EnsureActiveTabVisible(TabControl tabControl) { if (tabControl.ItemsSource == null) { return; } var ilist = (IList)tabControl.ItemsSource; var containerGenerator = tabControl.ItemContainerGenerator; var tabHeader = (TabItem)containerGenerator.ContainerFromItem(tabControl.SelectedItem); if (!FlexStackPanel.GetIsOverflowed(tabHeader) || !tabHeader.IsSelected) { return; } var item = containerGenerator.ItemFromContainer(tabHeader); ilist.Remove(item); ilist.Insert(0, item); tabControl.SelectedIndex = 0; UpdateFirstItem(tabControl); tabControl.InvalidateMeasure(); }
private static void UpdateFirstItem(TabControl tabControl) { var ilist = (IList)tabControl.ItemsSource; if (ilist.Count == 0) { return; } var containerGenerator = tabControl.ItemContainerGenerator; var tabItems = ilist.OfType <object>() .Select(containerGenerator.ContainerFromItem) .OfType <TabItem>() .ToList(); foreach (var t in tabItems) { FlexStackPanel.SetShrinkOnOverflow(t, false); } FlexStackPanel.SetShrinkOnOverflow(tabItems.First(), true); }