ZsmTreeView.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace TestTreeView
{
///
/// ZsmTreeView.xaml 的交互逻辑
///
public partial class ZsmTreeView : UserControl
{
#region 私有变量属性
///
/// 控件数据
///
private IList<Model.TreeModel> _itemsSourceData;
#endregion

    /// <summary>
    /// 构造
    /// </summary>
    public ZsmTreeView()
    {
        InitializeComponent();
    }

    /// <summary>
    /// 控件数据
    /// </summary>
    public IList<Model.TreeModel> ItemsSourceData
    {
        get { return _itemsSourceData; }
        set
        {
            _itemsSourceData = value;
            tvZsmTree.ItemsSource = _itemsSourceData;
        }
    }

    /// <summary>
    /// 设置对应Id的项为选中状态
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public int SetCheckedById(string id, IList<Model.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;
    }

    /// <summary>
    /// 获取选中项
    /// </summary>
    /// <returns></returns>
    public IList<Model.TreeModel> CheckedItemsIgnoreRelation()
    {

        return GetCheckedItemsIgnoreRelation(_itemsSourceData);
    }

    /// <summary>
    /// 私有方法,忽略层次关系的情况下,获取选中项
    /// </summary>
    /// <param name="list"></param>
    /// <returns></returns>
    private IList<Model.TreeModel> GetCheckedItemsIgnoreRelation(IList<Model.TreeModel> list)
    {
        IList<Model.TreeModel> treeList = new List<Model.TreeModel>();
        foreach (var tree in list)
        {
            if (tree.IsChecked)
            {
                treeList.Add(tree);
            }
            foreach (var child in GetCheckedItemsIgnoreRelation(tree.Children))
            {
                treeList.Add(child);
            }
        }
        return treeList;
    }

    /// <summary>
    /// 选中所有子项菜单事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void menuSelectAllChild_Click(object sender, RoutedEventArgs e)
    {
        if (tvZsmTree.SelectedItem != null)
        {
            Model.TreeModel tree = (Model.TreeModel)tvZsmTree.SelectedItem;
            tree.IsChecked = true;
            tree.SetChildrenChecked(true);
        }
    }

    /// <summary>
    /// 全部展开菜单事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void menuExpandAll_Click(object sender, RoutedEventArgs e)
    {
        foreach (Model.TreeModel tree in tvZsmTree.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)
    {
        foreach (Model.TreeModel tree in tvZsmTree.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)
    {
        foreach (Model.TreeModel tree in tvZsmTree.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)
    {
        foreach (Model.TreeModel tree in tvZsmTree.ItemsSource)
        {
            tree.IsChecked = false;
            tree.SetChildrenChecked(false);
        }
    }

    /// <summary>
    /// 鼠标右键事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        TreeViewItem item = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;
        if (item != null)
        {
            item.Focus();
            e.Handled = true;
        }
    }
    static DependencyObject VisualUpwardSearch<T>(DependencyObject source)
    {
        while (source != null && source.GetType() != typeof(T))
            source = VisualTreeHelper.GetParent(source);

        return source;
    }
}

}

ZsmTreeView.xaml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值