diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml b/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml
index 86137dfc57a..fd631f0dffb 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml
+++ b/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml
@@ -20,6 +20,7 @@
diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs b/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
index 1b61986ce60..3e1a238b362 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml.cs
@@ -1,3 +1,4 @@
+using System.Diagnostics;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Controls.Generators;
@@ -6,6 +7,7 @@
using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
+using Avalonia.VisualTree;
namespace Avalonia.Diagnostics.Views
{
@@ -100,12 +102,19 @@ private void TreeViewItemMaterialized(object sender, ItemContainerEventArgs e)
private void TreeViewItemTemplateApplied(object sender, TemplateAppliedEventArgs e)
{
var item = (TreeViewItem)sender;
- var headerPresenter = item.HeaderPresenter;
- headerPresenter.ApplyTemplate();
- var header = headerPresenter.Child;
- header.PointerEnter += AddAdorner;
- header.PointerLeave += RemoveAdorner;
+ // This depends on the default tree item template.
+ // We want to handle events in the item header but exclude events coming from children.
+ var header = item.FindDescendantOfType();
+
+ Debug.Assert(header != null);
+
+ if (header != null)
+ {
+ header.PointerEnter += AddAdorner;
+ header.PointerLeave += RemoveAdorner;
+ }
+
item.TemplateApplied -= TreeViewItemTemplateApplied;
}
}