public DefaultTabHeaderPanel(ITabControl tabControl, IVisualBootstrapper visualBootstrapper) : base(visualBootstrapper) { _indicatorRect = new RenderRectangle(); _itemsControl = tabControl; _tabsUsed = Size.Empty; _indicatord = Size.Empty; _indicator = new HorizontalRule(visualBootstrapper) { HorizontalAlignment = HorizontalAlignments.Left, Background = visualBootstrapper.ColorPalette.Secondary }; MarginProperty.AddTransition(_indicator, new ThicknessTransition(_indicator, MarginProperty, TimeSpan.FromSeconds(0.3), TimeSpan.Zero, TransitionFunctionType.Ease)); WidthProperty.AddTransition(_indicator, new QuantifiedDoubleTransition(_indicator, WidthProperty, TimeSpan.FromSeconds(0.3), TimeSpan.Zero, TransitionFunctionType.Ease)); _separator = new HorizontalRule(visualBootstrapper); Background = visualBootstrapper.ColorPalette.Background; var stackPanel = new UniformStackPanel(visualBootstrapper) { Orientation = Orientations.Horizontal }; var sourcePropertyAccessor = visualBootstrapper.GetPropertyAccessor( tabControl.GetType(), nameof(tabControl.TabItems)); var spBinding = new OneWayCollectionBinding(tabControl, nameof(tabControl.TabItems), stackPanel, nameof(Children), null, sourcePropertyAccessor); stackPanel.AddBinding(spBinding); _scrollPanel = new ScrollPanel(visualBootstrapper) { Content = stackPanel, ScrollMode = ScrollMode.Horizontal, IsScrollWithMouseDrag = true, VerticalAlignment = VerticalAlignments.Top }; VerticalAlignment = VerticalAlignments.Top; AddChildren(_scrollPanel, _indicator, _separator); tabControl.PropertyChanged += OnTabPropertyChanged; }