diff --git a/src/Avalonia.Controls/TreeView.cs b/src/Avalonia.Controls/TreeView.cs
index 19e09b4339..db8de49494 100644
--- a/src/Avalonia.Controls/TreeView.cs
+++ b/src/Avalonia.Controls/TreeView.cs
@@ -554,6 +554,54 @@ namespace Avalonia.Controls
}
}
+ ///
+ /// Find which node is first in hierarchy.
+ ///
+ /// Search root.
+ /// Nodes to find.
+ /// Node to find.
+ /// Found first node.
+ private static TreeViewItem FindFirstNode(TreeView treeView, TreeViewItem nodeA, TreeViewItem nodeB)
+ {
+ return FindInContainers(treeView.ItemContainerGenerator, nodeA, nodeB);
+ }
+
+ private static TreeViewItem FindInContainers(ITreeItemContainerGenerator containerGenerator,
+ TreeViewItem nodeA,
+ TreeViewItem nodeB)
+ {
+ IEnumerable containers = containerGenerator.Containers;
+
+ foreach (ItemContainerInfo container in containers)
+ {
+ TreeViewItem node = FindFirstNode(container.ContainerControl as TreeViewItem, nodeA, nodeB);
+
+ if (node != null)
+ {
+ return node;
+ }
+ }
+
+ return null;
+ }
+
+ private static TreeViewItem FindFirstNode(TreeViewItem node, TreeViewItem nodeA, TreeViewItem nodeB)
+ {
+ if (node == null)
+ {
+ return null;
+ }
+
+ TreeViewItem match = node == nodeA ? nodeA : node == nodeB ? nodeB : null;
+
+ if (match != null)
+ {
+ return match;
+ }
+
+ return FindInContainers(node.ItemContainerGenerator, nodeA, nodeB);
+ }
+
///
/// Returns all items that belong to containers between and .
/// The range is inclusive.
@@ -569,7 +617,7 @@ namespace Avalonia.Controls
return items;
}
- TreeViewItem firstItem = TreeViewHelper.FindFirstNode(this, new TreeViewHelper.SearchInfo(from, to));
+ TreeViewItem firstItem = FindFirstNode(this, from, to);
if (firstItem == null)
{
diff --git a/src/Avalonia.Controls/TreeViewHelper.cs b/src/Avalonia.Controls/TreeViewHelper.cs
deleted file mode 100644
index b2d43185cb..0000000000
--- a/src/Avalonia.Controls/TreeViewHelper.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) The Avalonia Project. All rights reserved.
-// Licensed under the MIT license. See licence.md file in the project root for full license information.
-
-using System.Collections.Generic;
-using Avalonia.Controls.Generators;
-
-namespace Avalonia.Controls
-{
- ///
- /// Helper for related operations.
- ///
- internal static class TreeViewHelper
- {
- ///
- /// Find which node from search info is first in hierarchy.
- ///
- /// Search root.
- /// Nodes to search for.
- /// Found first node.
- public static TreeViewItem FindFirstNode(TreeView treeView, in SearchInfo searchInfo)
- {
- return FindInContainers(treeView.ItemContainerGenerator, in searchInfo);
- }
-
- private static TreeViewItem FindInContainers(ITreeItemContainerGenerator containerGenerator,
- in SearchInfo searchInfo)
- {
- IEnumerable containers = containerGenerator.Containers;
-
- foreach (ItemContainerInfo container in containers)
- {
- TreeViewItem node = FindFirstNode(container.ContainerControl as TreeViewItem, in searchInfo);
-
- if (node != null)
- {
- return node;
- }
- }
-
- return null;
- }
-
- private static TreeViewItem FindFirstNode(TreeViewItem node, in SearchInfo searchInfo)
- {
- if (node == null)
- {
- return null;
- }
-
- TreeViewItem match = searchInfo.GetMatch(node);
-
- if (match != null)
- {
- return match;
- }
-
- return FindInContainers(node.ItemContainerGenerator, in searchInfo);
- }
-
- ///
- /// Node search info.
- ///
- public readonly struct SearchInfo
- {
- public readonly TreeViewItem Search1;
- public readonly TreeViewItem Search2;
-
- public SearchInfo(TreeViewItem search1, TreeViewItem search2)
- {
- Search1 = search1;
- Search2 = search2;
- }
-
- public TreeViewItem GetMatch(TreeViewItem candidate)
- {
- if (candidate == Search1)
- {
- return Search1;
- }
-
- if (candidate == Search2)
- {
- return Search2;
- }
-
- return null;
- }
- }
- }
-}