// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.Controls { using System; using System.Linq; using Perspex.Controls.Generators; using Perspex.Controls.Primitives; public class TreeViewItem : HeaderedItemsControl, ISelectable { public static readonly PerspexProperty IsExpandedProperty = PerspexProperty.Register("IsExpanded"); public static readonly PerspexProperty IsSelectedProperty = ListBoxItem.IsSelectedProperty.AddOwner(); private TreeView treeView; static TreeViewItem() { Control.PseudoClass(IsSelectedProperty, ":selected"); } public TreeViewItem() { Control.AffectsRender(IsSelectedProperty); } public bool IsExpanded { get { return this.GetValue(IsExpandedProperty); } set { this.SetValue(IsExpandedProperty, value); } } public bool IsSelected { get { return this.GetValue(IsSelectedProperty); } set { this.SetValue(IsSelectedProperty, value); } } protected override ItemContainerGenerator CreateItemContainerGenerator() { if (this.treeView == null) { throw new InvalidOperationException( "Cannot get the ItemContainerGenerator for a TreeViewItem " + "before it is added to a TreeView."); } return this.treeView.ItemContainerGenerator; } protected override void OnVisualParentChanged(Visual oldParent) { if (this.GetVisualParent() != null) { this.treeView = this.GetVisualAncestors().OfType().FirstOrDefault(); if (this.treeView == null) { throw new InvalidOperationException("TreeViewItems must be added to a TreeView."); } } else { this.treeView = null; } } } }