Bladeren bron

Fix TreeViewItem Expand/Collapse event source (#17558)

* test: add two fail tests.

* fix: fix Expand/Collapse event source.
Dong Bin 11 maanden geleden
bovenliggende
commit
6728f06586
2 gewijzigde bestanden met toevoegingen van 43 en 1 verwijderingen
  1. 1 1
      src/Avalonia.Controls/TreeViewItem.cs
  2. 42 0
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

+ 1 - 1
src/Avalonia.Controls/TreeViewItem.cs

@@ -85,7 +85,7 @@ namespace Avalonia.Controls
         {
             var routedEvent = args.NewValue.Value ? ExpandedEvent : CollapsedEvent;
             var eventArgs = new RoutedEventArgs() { RoutedEvent = routedEvent, Source = this };
-            TreeViewOwner?.RaiseEvent(eventArgs);
+            RaiseEvent(eventArgs);
         }
 
         /// <summary>

+ 42 - 0
tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

@@ -1528,6 +1528,48 @@ namespace Avalonia.Controls.UnitTests
             Assert.Equal(selected[0], target.SelectedItem);
             Assert.Equal(selected, target.SelectedItems);
         }
+        
+        [Fact]
+        public void CollapseEvent_Can_Be_Captured_By_TreeView_When_Collapsing_TreeViewItem()
+        {
+            using var app = Start();
+            var data = CreateTestTreeData();
+            var target = CreateTarget(data: data);
+            var item = data[0];
+            var container = Assert.IsType<TreeViewItem>(target.TreeContainerFromItem(item));
+
+            var raised = false;
+            object? source = null;
+            target.AddHandler(TreeViewItem.CollapsedEvent, (o, e) =>
+            {
+                raised = true;
+                source = e.Source;
+            });
+            container.IsExpanded = false;
+            Assert.True(raised);
+            Assert.Equal(container, source);
+        }
+        
+        [Fact]
+        public void CollapseEvent_Should_Be_Raised_When_Collapsing_TreeViewItem()
+        {
+            using var app = Start();
+            var data = CreateTestTreeData();
+            var target = CreateTarget(data: data);
+            var item = data[0];
+            var container = Assert.IsType<TreeViewItem>(target.TreeContainerFromItem(item));
+
+            var raised = false;
+            object? source = null;
+            container.AddHandler(TreeViewItem.CollapsedEvent, (o, e) =>
+            {
+                raised = true;
+                source = e.Source;
+            });
+            container.IsExpanded = false;
+            Assert.True(raised);
+            Assert.Equal(container, source);
+        }
 
         private static TreeView CreateTarget(Optional<IList<Node>?> data = default,
             bool expandAll = true,