diff --git a/src/Avalonia.Controls/TreeViewItem.cs b/src/Avalonia.Controls/TreeViewItem.cs index 3ac157f727..a7ac41c153 100644 --- a/src/Avalonia.Controls/TreeViewItem.cs +++ b/src/Avalonia.Controls/TreeViewItem.cs @@ -90,8 +90,20 @@ namespace Avalonia.Controls internal TreeView? TreeViewOwner => _treeView; - protected internal override Control CreateContainerForItemOverride() => new TreeViewItem(); - protected internal override bool IsItemItsOwnContainerOverride(Control item) => item is TreeViewItem; + protected internal override Control CreateContainerForItemOverride() + { + return EnsureTreeView().CreateContainerForItemOverride(); + } + + protected internal override bool IsItemItsOwnContainerOverride(Control item) + { + return EnsureTreeView().IsItemItsOwnContainerOverride(item); + } + + protected internal override void PrepareContainerForItemOverride(Control container, object? item, int index) + { + EnsureTreeView().PrepareContainerForItemOverride(container, item, index); + } /// protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) @@ -283,6 +295,9 @@ namespace Avalonia.Controls return logical != null ? result : @default; } + private TreeView EnsureTreeView() => _treeView ?? + throw new InvalidOperationException("The TreeViewItem is not part of a TreeView."); + private void HeaderDoubleTapped(object? sender, TappedEventArgs e) { OnHeaderDoubleTapped(e);