using System.Windows; using System.Windows.Controls; namespace HMI.UI { public class TreeListView : TreeView { public static readonly DependencyProperty ColumnsProperty = DependencyProperty.Register("Columns", typeof(GridViewColumnCollection), typeof(TreeListView), new PropertyMetadata(new GridViewColumnCollection())); public GridViewColumnCollection Columns { get { return (GridViewColumnCollection)GetValue(ColumnsProperty); } set { SetValue(ColumnsProperty, value); } } public static readonly DependencyProperty ColumnHeaderContainerStyleProperty = DependencyProperty.Register("ColumnHeaderContainerStyle", typeof(Style), typeof(TreeListView), new PropertyMetadata(null)); public Style ColumnHeaderContainerStyle { get { return (Style)GetValue(ColumnHeaderContainerStyleProperty); } set { SetValue(ColumnHeaderContainerStyleProperty, value); } } static TreeListView() { DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeListView), new FrameworkPropertyMetadata(typeof(TreeListView))); } public TreeListView() { Columns = new GridViewColumnCollection(); } protected override DependencyObject GetContainerForItemOverride() { return new TreeListViewItem(0, this); } } public class TreeListViewItem : TreeViewItem { public static readonly DependencyProperty ColumnsProperty = DependencyProperty.Register("Columns", typeof(GridViewColumnCollection), typeof(TreeListViewItem), new PropertyMetadata(null)); public int level { get; private set; } private TreeListView root; public TreeListViewItem(int level, TreeListView root) { this.level = level; this.root = root; this.Loaded += TreeListViewItem_Loaded; } public GridViewColumnCollection Columns { get { return (GridViewColumnCollection)GetValue(ColumnsProperty); } set { SetValue(ColumnsProperty, value); } } static TreeListViewItem() { DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeListViewItem), new FrameworkPropertyMetadata(typeof(TreeListViewItem))); } private void TreeListViewItem_Loaded(object sender, RoutedEventArgs e) { if (root is TreeListView treeListView) { Columns = treeListView.Columns; } } protected override DependencyObject GetContainerForItemOverride() { return new TreeListViewItem(level + 1, root); } } }