From 6728f0658626ee37b1e33e06dcee87c96470ad47 Mon Sep 17 00:00:00 2001 From: Dong Bin <14807942+rabbitism@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:35:50 +0800 Subject: [PATCH] Fix TreeViewItem Expand/Collapse event source (#17558) * test: add two fail tests. * fix: fix Expand/Collapse event source. --- src/Avalonia.Controls/TreeViewItem.cs | 2 +- .../TreeViewTests.cs | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/TreeViewItem.cs b/src/Avalonia.Controls/TreeViewItem.cs index 871d952678..e38709c5f5 100644 --- a/src/Avalonia.Controls/TreeViewItem.cs +++ b/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); } /// diff --git a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs b/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs index 38e41a3870..e7517f147d 100644 --- a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs +++ b/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(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(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?> data = default, bool expandAll = true,