Go Through Each Node in a WPF RadTreeView

I would like to go through each node in a WPF RadTreeView until a match is made.

Solution

This is possible with a coded solution. You'll expand each node and refresh the tree until you find your match.


WpfApplication app = Manager.ActiveApplication;
Assert.IsNotNull(app);
Telerik.WebAii.Controls.Xaml.Wpf.RadTreeView tree = app.MainWindow.Find.ByName<Telerik.WebAii.Controls.Xaml.Wpf.RadTreeView>("treeView");
Assert.IsNotNull(tree);

string match = Data["ExtractedValue"].ToString();
bool found = false;
IList<Telerik.WebAii.Controls.Xaml.Wpf.RadTreeViewItem> items = tree.Find.AllByType<Telerik.WebAii.Controls.Xaml.Wpf.RadTreeViewItem>();

while (found == false)
{
    foreach (Telerik.WebAii.Controls.Xaml.Wpf.RadTreeViewItem tvItem in items)
    {
        try
        {
            if (tvItem.IsExpanded == false)
            {
                tvItem.Expand();
                tree.Refresh();
            }
        }
        catch (Exception ex)
        {
        }

        if (tvItem.Text.Contains(match))
        {
            Log.WriteLine("Found: " + tvItem.Text);
            found = true;
            break;
        }

        tree.Refresh();
    }
    if (found == true)
    {
        break;
    }
}
Dim app As WpfApplication = Manager.ActiveApplication
Assert.IsNotNull(app)
Dim tree As Telerik.WebAii.Controls.Xaml.Wpf.RadTreeView = app.MainWindow.Find.ByName(Of Telerik.WebAii.Controls.Xaml.Wpf.RadTreeView)("treeView")
Assert.IsNotNull(tree)

Dim match As String = Data("ExtractedValue").ToString()
Dim found As Boolean = False
Dim items As IList(Of Telerik.WebAii.Controls.Xaml.Wpf.RadTreeViewItem) = tree.Find.AllByType(Of Telerik.WebAii.Controls.Xaml.Wpf.RadTreeViewItem)()

While found = False
    For Each tvItem As Telerik.WebAii.Controls.Xaml.Wpf.RadTreeViewItem In items
        Try
            If tvItem.IsExpanded = False Then
                tvItem.Expand()
                tree.Refresh()
            End If
        Catch ex As Exception
        End Try

        If tvItem.Text.Contains(match) Then
            Log.WriteLine("Found: " + tvItem.Text)
            found = True
            Exit For
        End If

        tree.Refresh()
    Next
    If found = True Then
        Exit While
    End If
End While