Browse Source

Set IsSelected on newly materialized TreeViewItems.

Steven Kirk 10 years ago
parent
commit
6cf9a43582
1 changed files with 21 additions and 1 deletions
  1. 21 1
      src/Perspex.Controls/TreeViewItem.cs

+ 21 - 1
src/Perspex.Controls/TreeViewItem.cs

@@ -73,12 +73,16 @@ namespace Perspex.Controls
         /// <inheritdoc/>
         protected override IItemContainerGenerator CreateItemContainerGenerator()
         {
-            return new TreeItemContainerGenerator<TreeViewItem>(
+            var result =  new TreeItemContainerGenerator<TreeViewItem>(
                 this,
                 TreeViewItem.HeaderProperty,
                 TreeViewItem.ItemsProperty,
                 TreeViewItem.IsExpandedProperty,
                 _treeView?.ItemContainerGenerator.Index ?? new TreeContainerIndex());
+
+            result.Materialized += ItemMaterialized;
+
+            return result;
         }
 
         /// <inheritdoc/>
@@ -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;
+                    }
+                }
+            }
+        }
     }
 }