From 11f18e0c10c5e6be8f16de908a744880013aa02c Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 19 May 2021 16:14:48 +0100 Subject: [PATCH] Merge pull request #5949 from MarchingCube/ux-treepage-highlight Fix devtools selection highlight requiring direct hover over the control --- .../Diagnostics/Views/TreePageView.xaml | 1 + .../Diagnostics/Views/TreePageView.xaml.cs | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) 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; } }