添加项目文件。
This commit is contained in:
266
Szmedi.RvKits/UserTreeView.xaml.cs
Normal file
266
Szmedi.RvKits/UserTreeView.xaml.cs
Normal file
@@ -0,0 +1,266 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
|
||||
using Szmedi.RvKits.Models;
|
||||
|
||||
namespace Szmedi.RvKits.Assists
|
||||
{
|
||||
/// <summary>
|
||||
/// ZsmTreeView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class UserTreeView : UserControl
|
||||
{
|
||||
#region 私有变量属性
|
||||
|
||||
/// <summary>
|
||||
/// 控件数据
|
||||
/// </summary>
|
||||
private IList<TreeModel> _itemsSourceData;
|
||||
|
||||
#endregion 私有变量属性
|
||||
|
||||
/// <summary>
|
||||
/// 控件数据
|
||||
/// </summary>
|
||||
public IList<TreeModel> ItemsSourceData
|
||||
{
|
||||
get => _itemsSourceData;
|
||||
set
|
||||
{
|
||||
_itemsSourceData = value;
|
||||
UserTree.ItemsSource = _itemsSourceData;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 构造
|
||||
/// </summary>
|
||||
public UserTreeView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置对应Id的项为选中状态
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public int SetCheckedById(string id, IList<TreeModel> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置对应Id的项为选中状态
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
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 节点右键:菜单获取选中所有子项
|
||||
|
||||
/// <summary>
|
||||
/// 选中所有子项菜单事件
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
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 获取选中所有项
|
||||
|
||||
/// <summary>
|
||||
/// 获取选中所有项(父节点和子节点)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IList<TreeModel> CheckedItemsIgnoreRelation()
|
||||
{
|
||||
return GetCheckedItemsIgnoreRelation(_itemsSourceData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 私有方法,忽略层次关系的情况下,获取选中项
|
||||
/// </summary>
|
||||
/// <param name="list"></param>
|
||||
/// <returns></returns>
|
||||
private IList<TreeModel> GetCheckedItemsIgnoreRelation(IList<TreeModel> list)
|
||||
{
|
||||
IList<TreeModel> treeList = new List<TreeModel>();
|
||||
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右键菜单
|
||||
|
||||
/// <summary>
|
||||
/// 全部展开菜单事件
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void menuExpandAll_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (UserTree.ItemsSource != null)
|
||||
{
|
||||
foreach (TreeModel tree in UserTree.ItemsSource)
|
||||
{
|
||||
tree.IsExpanded = true;
|
||||
tree.SetChildrenExpanded(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 全部折叠菜单事件
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void menuUnExpandAll_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (UserTree.ItemsSource != null)
|
||||
{
|
||||
foreach (TreeModel tree in UserTree.ItemsSource)
|
||||
{
|
||||
tree.IsExpanded = false;
|
||||
tree.SetChildrenExpanded(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 全部选中事件
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void menuSelectAll_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (UserTree.ItemsSource != null)
|
||||
{
|
||||
foreach (TreeModel tree in UserTree.ItemsSource)
|
||||
{
|
||||
tree.IsChecked = true;
|
||||
tree.SetChildrenChecked(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 全部取消选中
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
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 右键事件
|
||||
|
||||
/// <summary>
|
||||
/// 鼠标右键事件
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) is TreeViewItem item)
|
||||
{
|
||||
item.Focus();
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static DependencyObject VisualUpwardSearch<T>(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<TreeViewItem>(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 右键事件
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user