protected override void Awake() { base.Awake(); _associatedTreeViewSelectable = GetComponentInChildren <ITreeViewSelectable>(); _associatedTreeViewSelectable.SetAssociatedTreeViewElement(this); }
// does the real multi select private void SelectedItemChangedHandler(TreeViewItem item) { if (!this.MultiSelect) { return; } ITreeViewSelectable content = (ITreeViewSelectable)item.Header; _itemToCheck = null; if (content.IsSelected) { // Check it at the mouse up event to avoid deselecting everything when clicking to drag _itemToCheck = item; } else { if (!this.IsCtrlPressed) { GetTreeViewItems(true) .Select(t => t.Header) .Cast <ITreeViewSelectable>() .ToList() .ForEach(f => f.IsSelected = false); } if (this.IsShiftPressed && _lastItemSelected != null) { foreach (TreeViewItem tempItem in GetTreeViewItemsBetween(_lastItemSelected, item)) { ((ITreeViewSelectable)tempItem.Header).IsSelected = true; _lastItemSelected = tempItem; } } else { content.IsSelected = true; _lastItemSelected = item; this.treeViewInner.Items.Refresh(); this.treeViewInner.UpdateLayout(); } } }