protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) { if (ParentTreeView == null) { return; } //System.Diagnostics.Debug.WriteLine("P(" + ParentTreeView.Name + "): " + e.Property + " " + e.NewValue); if (e.Property.Name == "IsEditing") { if ((bool)e.NewValue == false) { StopEditing(); } } if (e.Property.Name == "IsExpanded") { // Bring newly expanded child nodes into view if they'd be outside of the current view if ((bool)e.NewValue == true) { if (VisualChildrenCount > 0) { ((FrameworkElement)GetVisualChild(VisualChildrenCount - 1)).BringIntoView(); } } // Deselect children of collapsed item // (If one resists, don't collapse) if ((bool)e.NewValue == false) { if (!ParentTreeView.DeselectRecursive(this, false)) { IsExpanded = true; } } } if (e.Property.Name == "IsVisible") { // Deselect invisible item and its children // (If one resists, don't hide) if ((bool)e.NewValue == false) { if (!ParentTreeView.DeselectRecursive(this, true)) { IsVisible = true; } } } base.OnPropertyChanged(e); }