Category / Section
How to select TreeViewItemAdv using key input in WPF TreeViewAdv?
5 mins read
As like in Microsoft Office application, end users would like an option in WPF TreeViewAdv to select TreeViewItemAdv, just by typing its content in Keyboard. But there is no default option for this requirement in TreeViewAdv and it can be achieved by handling its PreviewKeyDown event.
The following code snippets demonstrates the same.
C#:
/// <summary>
/// Occurs when Key is pressed
/// </summary>
/// <param name="sender">TreeViewAdv</param>
/// <param name="e">KeyEventArgs</param>
void treeview_PreviewKeyDown(object sender, KeyEventArgs e)
{
List<TreeViewItemAdv> samekey = new List<TreeViewItemAdv>();
TreeViewItemAdv selecteditemlevel1 = treeview.Items[0] as TreeViewItemAdv;
if (PreviousKey != e.Key.ToString())
{
PreviousselectedItem = null;
}
for (int i = 0; i < selecteditemlevel1.Items.Count; i++)
{
if (selecteditemlevel1.Items[i].ToString().StartsWith(e.Key.ToString()))
{
samekey.Add(selecteditemlevel1.Items[i] as TreeViewItemAdv);
}
}
for (int i = 0; i < samekey.Count; i++)
{
if (PreviousselectedItem == null || PreviousselectedItem == (samekey[i] as TreeViewItemAdv))
{
loopcompleted = true;
}
if (!(samekey[i] as TreeViewItemAdv).IsSelected && loopcompleted)
{
this.treeview.SelectedItems.Clear();
(samekey[i] as TreeViewItemAdv).IsSelected = true;
PreviousselectedItem = (samekey[i] as TreeViewItemAdv);
loopcompleted = false;
PreviousKey = e.Key.ToString();
if (samekey.Count - 1 == i)
{
PreviousselectedItem = null;
}
return;
}
}
samekey.Clear();
}
VB:
''' <summary>
''' Occurs when Key is pressed
''' </summary>
''' <param name="sender">TreeViewAdv</param>
''' <param name="e">KeyEventArgs</param>
Private Sub treeview_PreviewKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
Dim samekey As New List(Of TreeViewItemAdv)()
Dim selecteditemlevel1 As TreeViewItemAdv = TryCast(treeview.Items(0), TreeViewItemAdv)
If PreviousKey <> e.Key.ToString() Then
PreviousselectedItem = Nothing
End If
For i As Integer = 0 To selecteditemlevel1.Items.Count - 1
If selecteditemlevel1.Items(i).ToString().StartsWith(e.Key.ToString()) Then
samekey.Add(TryCast(selecteditemlevel1.Items(i), TreeViewItemAdv))
End If
Next i
For i As Integer = 0 To samekey.Count - 1
If PreviousselectedItem Is Nothing OrElse PreviousselectedItem Is (TryCast(samekey(i), TreeViewItemAdv)) Then
loopcompleted = True
End If
If Not (TryCast(samekey(i), TreeViewItemAdv)).IsSelected AndAlso loopcompleted Then
Me.treeview.SelectedItems.Clear()
TryCast(samekey(i), TreeViewItemAdv).IsSelected = True
PreviousselectedItem = (TryCast(samekey(i), TreeViewItemAdv))
loopcompleted = False
PreviousKey = e.Key.ToString()
If samekey.Count - 1 = i Then
PreviousselectedItem = Nothing
End If
Return
End If
Next i
samekey.Clear()
End Sub