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; } }
protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e) { if (ParentTreeView == null) { return; } if (e.LeftButton == MouseButtonState.Released && e.RightButton == MouseButtonState.Pressed) { return; } if (IsSelected == true) { IsSelected = false; } else if (IsSelected == false) { IsSelected = true; } else { IsSelected = false; } //TODO:逻辑父级需要做的逻辑 ParentTreeView.OnViewItemMouseDown(this); }