@ -73,6 +73,7 @@ namespace Avalonia.Controls
{
{
SelectionModeProperty . OverrideDefaultValue < TabControl > ( SelectionMode . AlwaysSelected ) ;
SelectionModeProperty . OverrideDefaultValue < TabControl > ( SelectionMode . AlwaysSelected ) ;
ItemsPanelProperty . OverrideDefaultValue < TabControl > ( DefaultPanel ) ;
ItemsPanelProperty . OverrideDefaultValue < TabControl > ( DefaultPanel ) ;
TabStripPlacementProperty . Changed . AddClassHandler < TabControl > ( ( x , e ) = > x . UpdateTabStripPlacement ( ) ) ;
AffectsMeasure < TabControl > ( TabStripPlacementProperty ) ;
AffectsMeasure < TabControl > ( TabStripPlacementProperty ) ;
SelectedItemProperty . Changed . AddClassHandler < TabControl > ( ( x , e ) = > x . UpdateSelectedContent ( ) ) ;
SelectedItemProperty . Changed . AddClassHandler < TabControl > ( ( x , e ) = > x . UpdateSelectedContent ( ) ) ;
AutomationProperties . ControlTypeOverrideProperty . OverrideDefaultValue < TabControl > ( AutomationControlType . Tab ) ;
AutomationProperties . ControlTypeOverrideProperty . OverrideDefaultValue < TabControl > ( AutomationControlType . Tab ) ;
@ -153,7 +154,7 @@ namespace Avalonia.Controls
protected internal override Control CreateContainerForItemOverride ( object? item , int index , object? recycleKey )
protected internal override Control CreateContainerForItemOverride ( object? item , int index , object? recycleKey )
{
{
return new TabItem ( ) ;
return new TabItem { TabStripPlacement = TabStripPlacement } ;
}
}
protected internal override bool NeedsContainerOverride ( object? item , int index , out object? recycleKey )
protected internal override bool NeedsContainerOverride ( object? item , int index , out object? recycleKey )
@ -229,6 +230,8 @@ namespace Avalonia.Controls
ItemsPresenterPart = e . NameScope . Find < ItemsPresenter > ( "PART_ItemsPresenter" ) ;
ItemsPresenterPart = e . NameScope . Find < ItemsPresenter > ( "PART_ItemsPresenter" ) ;
ItemsPresenterPart ? . ApplyTemplate ( ) ;
ItemsPresenterPart ? . ApplyTemplate ( ) ;
UpdateTabStripPlacement ( ) ;
// Set TabNavigation to Once on the panel if not already set and
// Set TabNavigation to Once on the panel if not already set and
// forward the TabOnceActiveElement to the panel.
// forward the TabOnceActiveElement to the panel.
if ( ItemsPresenterPart ? . Panel is { } panel )
if ( ItemsPresenterPart ? . Panel is { } panel )
@ -306,5 +309,22 @@ namespace Avalonia.Controls
change . GetNewValue < IInputElement ? > ( ) ) ;
change . GetNewValue < IInputElement ? > ( ) ) ;
}
}
}
}
private void UpdateTabStripPlacement ( )
{
var controls = ItemsPresenterPart ? . Panel ? . Children ;
if ( controls is null )
{
return ;
}
foreach ( var control in controls )
{
if ( control is TabItem tabItem )
{
tabItem . TabStripPlacement = TabStripPlacement ;
}
}
}
}
}
}
}