using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using Szmedi.RvKits.Models; namespace Szmedi.RvKits.Assists { /// /// ZsmTreeView.xaml 的交互逻辑 /// public partial class UserTreeView : UserControl { #region 私有变量属性 /// /// 控件数据 /// private IList _itemsSourceData; #endregion 私有变量属性 /// /// 控件数据 /// public IList ItemsSourceData { get => _itemsSourceData; set { _itemsSourceData = value; UserTree.ItemsSource = _itemsSourceData; } } /// /// 构造 /// public UserTreeView() { InitializeComponent(); } /// /// 设置对应Id的项为选中状态 /// /// /// public int SetCheckedById(string id, IList treeList) { foreach (var tree in treeList) { if (tree.Id.Equals(id)) { tree.IsChecked = true; return 1; } if (SetCheckedById(id, tree.Children) == 1) { return 1; } } return 0; } /// /// 设置对应Id的项为选中状态 /// /// /// public int SetCheckedById(string id) { foreach (var tree in ItemsSourceData) { if (tree.Id.Equals(id)) { tree.IsChecked = true; return 1; } if (SetCheckedById(id, tree.Children) == 1) { return 1; } } return 0; } #region 节点右键:菜单获取选中所有子项 /// /// 选中所有子项菜单事件 /// /// /// private void menuSelectAllChild_Click(object sender, RoutedEventArgs e) { if (UserTree.SelectedItem != null) { TreeModel tree = (TreeModel)UserTree.SelectedItem; tree.IsChecked = true; tree.SetChildrenChecked(true); } } #endregion 节点右键:菜单获取选中所有子项 #region 获取选中所有项 /// /// 获取选中所有项(父节点和子节点) /// /// public IList CheckedItemsIgnoreRelation() { return GetCheckedItemsIgnoreRelation(_itemsSourceData); } /// /// 私有方法,忽略层次关系的情况下,获取选中项 /// /// /// private IList GetCheckedItemsIgnoreRelation(IList list) { IList treeList = new List(); foreach (var tree in list) { if (tree.IsChecked == true) { treeList.Add(tree); } //第二次调用方法时由于没有子节点即为空,所以不进行执行下面语句,跳出下面的foreach语句 foreach (var child in GetCheckedItemsIgnoreRelation(tree.Children)) { treeList.Add(child); } } return treeList; } #endregion 获取选中所有项 #region TreeView右键菜单 /// /// 全部展开菜单事件 /// /// /// private void menuExpandAll_Click(object sender, RoutedEventArgs e) { if (UserTree.ItemsSource != null) { foreach (TreeModel tree in UserTree.ItemsSource) { tree.IsExpanded = true; tree.SetChildrenExpanded(true); } } } /// /// 全部折叠菜单事件 /// /// /// private void menuUnExpandAll_Click(object sender, RoutedEventArgs e) { if (UserTree.ItemsSource != null) { foreach (TreeModel tree in UserTree.ItemsSource) { tree.IsExpanded = false; tree.SetChildrenExpanded(false); } } } /// /// 全部选中事件 /// /// /// private void menuSelectAll_Click(object sender, RoutedEventArgs e) { if (UserTree.ItemsSource != null) { foreach (TreeModel tree in UserTree.ItemsSource) { tree.IsChecked = true; tree.SetChildrenChecked(true); } } } /// /// 全部取消选中 /// /// /// private void menuUnSelectAll_Click(object sender, RoutedEventArgs e) { if (UserTree.ItemsSource != null) { foreach (TreeModel tree in UserTree.ItemsSource) { tree.IsChecked = false; tree.SetChildrenChecked(false); } } } #endregion TreeView右键菜单 #region 右键事件 /// /// 鼠标右键事件 /// /// /// private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { if (VisualUpwardSearch(e.OriginalSource as DependencyObject) is TreeViewItem item) { item.Focus(); e.Handled = true; } } private static DependencyObject VisualUpwardSearch(DependencyObject source) { while (source != null && source.GetType() != typeof(T)) { source = VisualTreeHelper.GetParent(source); } return source; } private void treeNode_Click(object sender, RoutedEventArgs e) { if (VisualUpwardSearch(e.OriginalSource as DependencyObject) is TreeViewItem item) { item.Focus(); if (UserTree.SelectedItem != null) { TreeModel tree = (TreeModel)UserTree.SelectedItem; tree.SetChildrenChecked(); tree.SetParentChecked(); } e.Handled = true; } } #endregion 右键事件 } }