From c3fbe4ebfdfc50627214255b316ab1131ebe35d7 Mon Sep 17 00:00:00 2001 From: pavelovcharov <1357165+pavelovcharov@users.noreply.github.com> Date: Thu, 7 Dec 2023 13:03:10 +0300 Subject: [PATCH] Fix: TabItem.TabStripPlacement is not set for new tab items (#13849) * TabItem.TabStripPlacemenet should be correctly set * fix: TabItem.TabStripPlacemenet should be correctly set * move TabItemStripPlacement assignment to PrepareContainerForItemOverride * remove excessive UpdateTabStripPlacement call on TabStripPlacementProperty.Changed #Conflicts: # tests/Avalonia.Controls.UnitTests/TabControlTests.cs --- src/Avalonia.Controls/TabControl.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/TabControl.cs b/src/Avalonia.Controls/TabControl.cs index 5b7ea7b9a5..e71a5a656b 100644 --- a/src/Avalonia.Controls/TabControl.cs +++ b/src/Avalonia.Controls/TabControl.cs @@ -73,7 +73,6 @@ namespace Avalonia.Controls { SelectionModeProperty.OverrideDefaultValue(SelectionMode.AlwaysSelected); ItemsPanelProperty.OverrideDefaultValue(DefaultPanel); - TabStripPlacementProperty.Changed.AddClassHandler((x, e) => x.UpdateTabStripPlacement()); AffectsMeasure(TabStripPlacementProperty); SelectedItemProperty.Changed.AddClassHandler((x, e) => x.UpdateSelectedContent()); AutomationProperties.ControlTypeOverrideProperty.OverrideDefaultValue(AutomationControlType.Tab); @@ -154,7 +153,7 @@ namespace Avalonia.Controls protected internal override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey) { - return new TabItem { TabStripPlacement = TabStripPlacement }; + return new TabItem(); } protected internal override bool NeedsContainerOverride(object? item, int index, out object? recycleKey) @@ -166,6 +165,11 @@ namespace Avalonia.Controls { base.PrepareContainerForItemOverride(element, item, index); + if (element is TabItem tabItem) + { + tabItem.TabStripPlacement = TabStripPlacement; + } + if (index == SelectedIndex) { UpdateSelectedContent(element);