using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace HiiShe.WPFUI.Controls
{
public class HSTreeView : TreeView
{
public HSTreeView()
{
base.Background = Brushes.Orange;
}
#region 私有变量属性
///
/// 控件数据
///
private IList _itemsSourceData;
#endregion
///
/// 控件数据
///
public IList ItemsSourceData
{
get { return _itemsSourceData; }
set
{
_itemsSourceData = value;
this.ItemsSource = _itemsSourceData;
}
}
///
/// 设置对应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;
}
///
/// 获取选中项
///
///
public IList CheckedItemsIgnoreRelation()
{
return GetCheckedItemsIgnoreRelation(_itemsSourceData);
}
///
/// 私有方法,忽略层次关系的情况下,获取选中项
///
///
///
private IList GetCheckedItemsIgnoreRelation(IList list)
{
IList treeList = new List();
foreach (var tree in list)
{
if (tree.IsChecked)
{
treeList.Add(tree);
}
foreach (var child in GetCheckedItemsIgnoreRelation(tree.Children))
{
treeList.Add(child);
}
}
return treeList;
}
///
/// 选中所有子项菜单事件
///
///
///
private void menuSelectAllChild_Click(object sender, RoutedEventArgs e)
{
if (this.SelectedItem != null)
{
TreeModel tree = (TreeModel)this.SelectedItem;
tree.IsChecked = true;
tree.SetChildrenChecked(true);
}
}
///
/// 全部展开菜单事件
///
///
///
private void menuExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach (TreeModel tree in this.ItemsSource)
{
tree.IsExpanded = true;
tree.SetChildrenExpanded(true);
}
}
///
/// 全部折叠菜单事件
///
///
///
private void menuUnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach (TreeModel tree in this.ItemsSource)
{
tree.IsExpanded = false;
tree.SetChildrenExpanded(false);
}
}
///
/// 全部选中事件
///
///
///
private void menuSelectAll_Click(object sender, RoutedEventArgs e)
{
foreach (TreeModel tree in this.ItemsSource)
{
tree.IsChecked = true;
tree.SetChildrenChecked(true);
}
}
///
/// 全部取消选中
///
///
///
private void menuUnSelectAll_Click(object sender, RoutedEventArgs e)
{
foreach (TreeModel tree in this.ItemsSource)
{
tree.IsChecked = false;
tree.SetChildrenChecked(false);
}
}
///
/// 鼠标右键事件
///
///
///
private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem item = VisualUpwardSearch(e.OriginalSource as DependencyObject) as TreeViewItem;
if (item != null)
{
item.Focus();
e.Handled = true;
}
}
static DependencyObject VisualUpwardSearch(DependencyObject source)
{
while (source != null && source.GetType() != typeof(T))
source = VisualTreeHelper.GetParent(source);
return source;
}
}
public class TreeModel : INotifyPropertyChanged
{
#region 私有变量
///
/// Id值
///
private string _id;
///
/// 显示的名称
///
private string _name;
///
/// 图标路径
///
private string _icon;
///
/// 选中状态
///
private bool _isChecked;
///
/// 折叠状态
///
private bool _isExpanded;
///
/// 子项
///
private IList _children;
///
/// 父项
///
private TreeModel _parent;
#endregion
///
/// 构造
///
public TreeModel()
{
Children = new List();
_isChecked = false;
IsExpanded = false;
_icon = "/Images/16_16/folder_go.png";
}
///
/// 键值
///
public string Id
{
get { return _id; }
set { _id = value; }
}
///
/// 显示的字符
///
public string Name
{
get { return _name; }
set { _name = value; }
}
///
/// 图标
///
public string Icon
{
get { return _icon; }
set { _icon = value; }
}
///
/// 指针悬停时的显示说明
///
public string ToolTip
{
get
{
return String.Format("{0}-{1}", Id, Name);
}
}
///
/// 是否选中
///
public bool IsChecked
{
get
{
return _isChecked;
}
set
{
if (value != _isChecked)
{
_isChecked = value;
NotifyPropertyChanged("IsChecked");
if (_isChecked)
{
//如果选中则父项也应该选中
if (Parent != null)
{
Parent.IsChecked = true;
}
}
else
{
//如果取消选中子项也应该取消选中
foreach (TreeModel child in Children)
{
child.IsChecked = false;
}
}
}
}
}
///
/// 是否展开
///
public bool IsExpanded
{
get { return _isExpanded; }
set
{
if (value != _isExpanded)
{
//折叠状态改变
_isExpanded = value;
NotifyPropertyChanged("IsExpanded");
}
}
}
///
/// 父项
///
public TreeModel Parent
{
get { return _parent; }
set { _parent = value; }
}
///
/// 子项
///
public IList Children
{
get { return _children; }
set { _children = value; }
}
///
/// 设置所有子项的选中状态
///
///
public void SetChildrenChecked(bool isChecked)
{
foreach (TreeModel child in Children)
{
child.IsChecked = IsChecked;
child.SetChildrenChecked(IsChecked);
}
}
///
/// 设置所有子项展开状态
///
///
public void SetChildrenExpanded(bool isExpanded)
{
foreach (TreeModel child in Children)
{
child.IsExpanded = isExpanded;
child.SetChildrenExpanded(isExpanded);
}
}
///
/// 属性改变事件
///
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}