diff --git a/src/Perspex.Controls/TreeViewItem.cs b/src/Perspex.Controls/TreeViewItem.cs
index e2d8107cfc..e68a77b56e 100644
--- a/src/Perspex.Controls/TreeViewItem.cs
+++ b/src/Perspex.Controls/TreeViewItem.cs
@@ -73,12 +73,16 @@ namespace Perspex.Controls
///
protected override IItemContainerGenerator CreateItemContainerGenerator()
{
- return new TreeItemContainerGenerator(
+ var result = new TreeItemContainerGenerator(
this,
TreeViewItem.HeaderProperty,
TreeViewItem.ItemsProperty,
TreeViewItem.IsExpandedProperty,
_treeView?.ItemContainerGenerator.Index ?? new TreeContainerIndex());
+
+ result.Materialized += ItemMaterialized;
+
+ return result;
}
///
@@ -119,5 +123,21 @@ namespace Perspex.Controls
base.OnKeyDown(e);
}
+
+ private void ItemMaterialized(object sender, ItemContainerEventArgs e)
+ {
+ var selectedItem = _treeView?.SelectedItem;
+
+ if (selectedItem != null)
+ {
+ foreach (var container in e.Containers)
+ {
+ if (container.Item == selectedItem)
+ {
+ ((TreeViewItem)container.ContainerControl).IsSelected = true;
+ }
+ }
+ }
+ }
}
}