Browse Source

Merge pull request #5949 from MarchingCube/ux-treepage-highlight

Fix devtools selection highlight requiring direct hover over the control
Dan Walmsley 4 years ago
parent
commit
59b5d9b519

+ 1 - 0
src/Avalonia.Diagnostics/Diagnostics/Views/TreePageView.xaml

@@ -20,6 +20,7 @@
       <TreeView.Styles>
         <Style Selector="TreeViewItem">
           <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
+          <Setter Property="Background" Value="Transparent" />
         </Style>
       </TreeView.Styles>
     </TreeView>

+ 14 - 5
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.Diagnostics.ViewModels;
 using Avalonia.Input;
 using Avalonia.Markup.Xaml;
 using Avalonia.Media;
+using Avalonia.VisualTree;
 
 namespace Avalonia.Diagnostics.Views
 {
@@ -100,12 +102,19 @@ namespace Avalonia.Diagnostics.Views
         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<Border>();
+
+            Debug.Assert(header != null);
+
+            if (header != null)
+            {
+                header.PointerEnter += AddAdorner;
+                header.PointerLeave += RemoveAdorner;
+            }
+
             item.TemplateApplied -= TreeViewItemTemplateApplied;
         }
     }