internal void OnViewItemMouseDown(MultiSelectionTreeViewItem viewItem) { if (viewItem == null) { return; } switch (SelectionMode) { case SelectionModalities.Single: ManageSingleSelection(viewItem); break; case SelectionModalities.Multiple: ManageCtrlSelection(viewItem); break; case SelectionModalities.Keyboard: if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl) || Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)) { ManageCtrlSelection(viewItem); } else { ManageSingleSelection(viewItem); } break; default: break; } _lastClickedItem = viewItem.IsSelected == true ? viewItem : null; }
/// <summary> /// 取消所有子节点的选中 /// </summary> public void UnSelectAllChildren() { if (Items != null && Items.Count > 0) { foreach (var item in Items) { if (item is MultiSelectionTreeViewItem) { (item as MultiSelectionTreeViewItem).UnSelectAllChildren(); } else { MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem; if (tvi != null) { tvi.UnSelectAllChildren(); } } } } if (IsSelected != false) { IsSelected = false; } //TODO: ParentTreeView.OnSelectionChnanged(this); }
/// <summary> /// 选中所有展开的节点 /// </summary> public void SelectAllExpandChildren() { if (Items != null && Items.Count > 0) { if (!IsExpanded) { IsExpanded = true; } foreach (var item in Items) { if (item is MultiSelectionTreeViewItem) { (item as MultiSelectionTreeViewItem).SelectAllExpandChildren(); } else { MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem; if (tvi != null) { if (tvi.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) { tvi.UpdateLayout(); } tvi.SelectAllExpandChildren(); } } } } if (IsSelected != true) { IsSelected = true; } //TODO: ParentTreeView.OnSelectionChnanged(this); }
/// <summary> /// 展开所有子节点 /// </summary> public void ExpandAllChildren() { if (Items != null && Items.Count > 0) { foreach (var item in Items) { if (item is MultiSelectionTreeViewItem) { MultiSelectionTreeViewItem tvi = item as MultiSelectionTreeViewItem; if (!tvi.IsExpanded) { tvi.IsExpanded = true; } tvi.ExpandAllChildren(); } else { MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem; if (tvi != null) { if (!tvi.IsExpanded) { tvi.IsExpanded = true; } //如果子项还没有初始化容器,则刷新布局获取容器,保证取遍历的时候取到 if (tvi.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) { tvi.UpdateLayout(); } tvi.ExpandAllChildren(); } } } } }
protected override void OnKeyDown(KeyEventArgs e) { try { MultiSelectionTreeViewItem itemToSelect = null; if (e.Key == Key.Left) { this.IsExpanded = false; } else if (e.Key == Key.Right) { this.IsExpanded = true; } else if (e.Key == Key.Up) { int curentNodeIndex = this.ParentItemsControl.ItemContainerGenerator.IndexFromContainer(this); if (curentNodeIndex == 0) { itemToSelect = this.ParentTreeViewItem; } else { MultiSelectionTreeViewItem temp = null; temp = GetPreviousNodeAtSameLevel(this); itemToSelect = GetLastVisibleChildNodeOf(temp); } } else if (e.Key == Key.Down) { if (this.IsExpanded && this.Items.Count > 0) { itemToSelect = this.ItemContainerGenerator.ContainerFromIndex(0) as MultiSelectionTreeViewItem; } else { itemToSelect = GetNexNodeAtSameLevel(this); if (itemToSelect == null) { MultiSelectionTreeViewItem temp = this.ParentTreeViewItem; while (itemToSelect == null && temp != null) { itemToSelect = GetNexNodeAtSameLevel(temp); temp = temp.ParentTreeViewItem; } } } } if (itemToSelect != null) { itemToSelect.Focus(); itemToSelect.IsSelected = true; //TODO:Treeview逻辑 ParentTreeView.OnViewItemMouseDown(itemToSelect); } } catch (Exception) { e.Handled = true; } }
private void RemoveItemFromSelection(MultiSelectionTreeViewItem newItem) { if (_selectedItems.Contains(newItem)) { _selectedItems.Remove(newItem); } OnTextChanged(); }
private void AddItemToSelection(MultiSelectionTreeViewItem newItem) { if (!_selectedItems.Contains(newItem)) { _selectedItems.Add(newItem); } OnTextChanged(); }
/// <summary> /// 获取上个可见节点,如果节点有子节点并且展开则取最后的子节点 /// </summary> /// <param name="item"></param> /// <returns></returns> private MultiSelectionTreeViewItem GetLastVisibleChildNodeOf(MultiSelectionTreeViewItem item) { MultiSelectionTreeViewItem lastVisibleNode = item; while (lastVisibleNode != null && lastVisibleNode.Items.Count > 0 && lastVisibleNode.IsExpanded) { lastVisibleNode = lastVisibleNode.ItemContainerGenerator.ContainerFromIndex(lastVisibleNode.Items.Count - 1) as MultiSelectionTreeViewItem; } return(lastVisibleNode); }
/// <summary> /// 获取节点在树控件上的深度 /// </summary> /// <returns></returns> public int GetDepth() { MultiSelectionTreeViewItem parent = this; while (parent.ParentTreeViewItem != null) { return(parent.ParentTreeViewItem.GetDepth() + 1); } return(0); }
private void ManageSingleSelection(MultiSelectionTreeViewItem viewItem) { bool?isMultiSelected = viewItem.IsSelected; UnSelectAll(); if (isMultiSelected == true) { viewItem.IsSelected = isMultiSelected; AddItemToSelection(viewItem); } }
private void ManageCtrlSelection(MultiSelectionTreeViewItem viewItem) { bool?isMultiSelected = viewItem.IsSelected; if (isMultiSelected == true) { AddItemToSelection(viewItem); } else { RemoveItemFromSelection(viewItem); } }
internal void OnSelectionChnanged(MultiSelectionTreeViewItem viewItem) { if (viewItem == null) { return; } if (viewItem.IsSelected == true) { AddItemToSelection(viewItem); } else { RemoveItemFromSelection(viewItem); } }
/// <summary> /// 取消所有父节点的选中 /// </summary> public void UnSelectAllParent() { _isUnSelectParent = true; try { MultiSelectionTreeViewItem parent = ParentTreeViewItem; while (parent != null && parent.IsSelected != false) { bool isSelected = false; foreach (var item in parent.Items) { MultiSelectionTreeViewItem viewItem = null; if (item is MultiSelectionTreeViewItem) { viewItem = item as MultiSelectionTreeViewItem; } else { viewItem = parent.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem; } if (viewItem == null || viewItem.IsSelected != false) { isSelected = true; break; } } if (isSelected) { parent.IsSelected = null; } else { parent.IsSelected = false; } parent = parent.ParentTreeViewItem; } } catch (Exception ex) { throw ex; } finally { _isUnSelectParent = false; } }
/// <summary> /// 获取同级别的下一个节点 /// </summary> /// <param name="item"></param> /// <returns></returns> private MultiSelectionTreeViewItem GetNexNodeAtSameLevel(MultiSelectionTreeViewItem item) { if (item == null) { return(null); } MultiSelectionTreeViewItem nextNodeAtSame = null; if (item.ParentItemsControl != null) { int index = item.ParentItemsControl.ItemContainerGenerator.IndexFromContainer(item); if (index <= item.Items.Count - 1) { nextNodeAtSame = item.ParentItemsControl.ItemContainerGenerator.ContainerFromIndex(index + 1) as MultiSelectionTreeViewItem; } } return(nextNodeAtSame); }
/// <summary> /// 获取与某节点处于同意等级,并且此节点的同等级的上个节点 /// </summary> /// <param name="item">传入的节点</param> /// <returns>节点同意等级的上个节点</returns> private MultiSelectionTreeViewItem GetPreviousNodeAtSameLevel(MultiSelectionTreeViewItem item) { if (item == null) { return(null); } MultiSelectionTreeViewItem previousNodeAtSameLevel = null; if (item.ParentItemsControl != null) { int index = item.ParentItemsControl.ItemContainerGenerator.IndexFromContainer(item); if (index > 0) { previousNodeAtSameLevel = item.ParentItemsControl.ItemContainerGenerator.ContainerFromIndex(index - 1) as MultiSelectionTreeViewItem; } } return(previousNodeAtSameLevel); }
private static void OnIsDropDownOpenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CheckBoxTreeView cb = (CheckBoxTreeView)d; if (cb._poup != null) { if ((bool)e.NewValue) { cb.Dispatcher.BeginInvoke(DispatcherPriority.Send, (DispatcherOperationCallback) delegate(object arg) { //展开所有子节点 if (cb._treeView != null && cb.ItemsSource != null) { foreach (var item in cb._treeView.Items) { if (item is MultiSelectionTreeViewItem) { (item as MultiSelectionTreeViewItem).IsExpanded = true; } else { MultiSelectionTreeViewItem tvi = cb._treeView.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem; if (tvi != null) { if (!tvi.IsExpanded) { tvi.IsExpanded = true; } //如果子项还没有初始化容器,则刷新布局获取容器,保证取遍历的时候取到 if (tvi.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) { tvi.UpdateLayout(); } tvi.ExpandAllChildren(); } } } } return(null); }, cb); } } }
private static void OnSelectedExChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MultiSelectionTreeViewItem tvi = d as MultiSelectionTreeViewItem; if ((bool?)e.NewValue != (bool?)e.OldValue) { tvi.IsSelected = (bool?)e.NewValue; if ((bool?)e.NewValue == true) { tvi.OnSelectedEx(); } else if ((bool?)e.NewValue == false) { tvi.OnUnselectedEx(); } else { //tvi.OnUnselectedEx(); } } }
private void UnSelectAll() { if (Items != null && Items.Count > 0) { foreach (var item in Items) { if (item is MultiSelectionTreeViewItem) { (item as MultiSelectionTreeViewItem).UnSelectAllChildren(); } else { MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem; if (tvi != null) { tvi.UnSelectAllChildren(); } } } } }