From 8bb1349785fa3f68a920ccfc63936e378c4b0a93 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 1 Dec 2022 11:31:01 +0100 Subject: [PATCH] Setup TabItems. --- src/Avalonia.Controls/ItemsControl.cs | 25 +++++++++++++++++-------- src/Avalonia.Controls/TabControl.cs | 10 +++++++++- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index 7c24717a06..3de4017190 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/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); } /// diff --git a/src/Avalonia.Controls/TabControl.cs b/src/Avalonia.Controls/TabControl.cs index d08e0a61da..952a9e448c 100644 --- a/src/Avalonia.Controls/TabControl.cs +++ b/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)