diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index f8aa38670f..a082f8cdec 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/src/Avalonia.Controls/ItemsControl.cs @@ -313,9 +313,9 @@ namespace Avalonia.Controls hic.Header = item; hic.HeaderTemplate = itemTemplate; - var treeTemplate = (itemTemplate ?? hic.FindDataTemplate(item)) as ITreeDataTemplate; + itemTemplate ??= hic.FindDataTemplate(item) ?? this.FindDataTemplate(item); - if (treeTemplate is not null) + if (itemTemplate is ITreeDataTemplate treeTemplate) { if (item is not null && treeTemplate.ItemsSelector(item) is { } itemsBinding) BindingOperations.Apply(hic, ItemsProperty, itemsBinding, null); @@ -481,14 +481,6 @@ namespace Avalonia.Controls internal void PrepareItemContainer(Control container, object? item, int index) { - // Putting this precondition in place in case we want to raise an event when a - // container is realized. If we want to do that, then the event subscriber will expect - // the container to be attached to the tree. Not using IsAttachedToVisualTree here - // because a bunch of tests don't have a rooted visual tree. - if (container.GetVisualParent() is null) - throw new InvalidOperationException( - "Container must be attached to parent before PrepareItemContainer is called."); - var itemContainerTheme = ItemContainerTheme; if (itemContainerTheme is not null && diff --git a/src/Avalonia.Controls/Presenters/PanelContainerGenerator.cs b/src/Avalonia.Controls/Presenters/PanelContainerGenerator.cs index 9b38c261e7..9ebff9ac7b 100644 --- a/src/Avalonia.Controls/Presenters/PanelContainerGenerator.cs +++ b/src/Avalonia.Controls/Presenters/PanelContainerGenerator.cs @@ -137,9 +137,9 @@ namespace Avalonia.Controls.Presenters container = generator.CreateContainer(); } + generator.PrepareItemContainer(container, item, index); itemsControl.AddLogicalChild(container); children.Insert(index, container); - generator.PrepareItemContainer(container, item, index); } private void ClearItemsControlLogicalChildren() diff --git a/src/Avalonia.Controls/VirtualizingCarouselPanel.cs b/src/Avalonia.Controls/VirtualizingCarouselPanel.cs index d21959ff8b..7f0c0da065 100644 --- a/src/Avalonia.Controls/VirtualizingCarouselPanel.cs +++ b/src/Avalonia.Controls/VirtualizingCarouselPanel.cs @@ -275,8 +275,8 @@ namespace Avalonia.Controls } else if (generator.IsItemItsOwnContainer(controlItem)) { - AddInternalChild(controlItem); generator.PrepareItemContainer(controlItem, controlItem, index); + AddInternalChild(controlItem); controlItem.SetValue(ItemIsOwnContainerProperty, true); return controlItem; } @@ -311,8 +311,8 @@ namespace Avalonia.Controls var item = items[index]; var container = generator.CreateContainer(); - AddInternalChild(container); generator.PrepareItemContainer(container, item, index); + AddInternalChild(container); return container; }