Browse Source

Setup TabItems.

Steven Kirk 3 years ago
parent
commit
8bb1349785
2 changed files with 26 additions and 9 deletions
  1. 17 8
      src/Avalonia.Controls/ItemsControl.cs
  2. 9 1
      src/Avalonia.Controls/TabControl.cs

+ 17 - 8
src/Avalonia.Controls/ItemsControl.cs

@@ -281,21 +281,30 @@ namespace Avalonia.Controls
             if (container == item)
                 return;
 
-            if (container is ContentControl cc)
+            if (container is HeaderedContentControl hcc)
             {
-                cc.SetValue(ContentControl.ContentProperty, item, BindingPriority.Template);
+                hcc.Content = item;
+
+                if (item is IHeadered headered)
+                    hcc.Header = headered.Header;
+                else if (item is not Visual)
+                    hcc.Header = item;
+
+                if (ItemTemplate is { } it)
+                    hcc.HeaderTemplate = it;
+            }
+            else if (container is ContentControl cc)
+            {
+                cc.Content = item;
                 if (ItemTemplate is { } it)
-                    cc.SetValue(ContentControl.ContentTemplateProperty, it, BindingPriority.Template);
+                    cc.ContentTemplate = it;
             }
             else if (container is ContentPresenter p)
             {
-                p.SetValue(ContentPresenter.ContentProperty, item, BindingPriority.Template);
+                p.Content = item;
                 if (ItemTemplate is { } it)
-                    p.SetValue(ContentPresenter.ContentTemplateProperty, it, BindingPriority.Template);
+                    p.ContentTemplate = it;
             }
-
-            if (ItemContainerTheme is not null)
-                container.SetValue(ThemeProperty, ItemContainerTheme, BindingPriority.Template);
         }
 
         /// <summary>

+ 9 - 1
src/Avalonia.Controls/TabControl.cs

@@ -171,7 +171,15 @@ namespace Avalonia.Controls
         protected internal override void PrepareContainerForItemOverride(Control element, object? item, int index)
         {
             base.PrepareContainerForItemOverride(element, item, index);
-            UpdateSelectedContent();
+            
+            if (element is HeaderedContentControl hcc && ContentTemplate is { } ct)
+                hcc.ContentTemplate = ct;
+
+            if (index == SelectedIndex && element is ContentControl container)
+            {
+                SelectedContentTemplate = container.ContentTemplate;
+                SelectedContent = container.Content;
+            }
         }
 
         protected override void ContainerIndexChangedOverride(Control container, int oldIndex, int newIndex)