Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }