using System; using System.Collections; using System.Windows; using System.Windows.Controls; namespace HMI.UI { public class TreeDataGrid : DataGrid { /// /// /// public event EventHandler ExpandedChange; public virtual void OnExpandedChange(bool expand) { ExpandedChange?.Invoke(this, expand); } static TreeDataGrid() { //ScrollViewer.HorizontalScrollBarVisibilityProperty // .OverrideMetadata(typeof(TreeDataGrid), new FrameworkPropertyMetadata(ScrollBarVisibility.Disabled)); //ScrollViewer.VerticalScrollBarVisibilityProperty // .OverrideMetadata(typeof(TreeDataGrid), new FrameworkPropertyMetadata(ScrollBarVisibility.Disabled)); } protected override DependencyObject GetContainerForItemOverride() { return new TreeDataGridRow(); } protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue) { base.OnItemsSourceChanged(oldValue, newValue); } } public class TreeDataGridRow : DataGridRow { public TreeDataGridRow() { this.DataContextChanged += TreeGridItem_DataContextChanged; } private void TreeGridItem_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { if (e.OldValue != null && e.OldValue is TreeItemData oldTreeData) { oldTreeData.IsExpandedChange -= DataIsExpandedChange; oldTreeData.VisibleChange -= DataVisiableChange; } if (DataContext != null && DataContext is TreeItemData treeData) { treeData.IsExpandedChange += DataIsExpandedChange; treeData.VisibleChange += DataVisiableChange; } } private void DataIsExpandedChange(object sender, bool IsExpanded) { object parent = ItemsControl.ItemsControlFromItemContainer(this); if (sender is TreeItemData tid) { foreach (var data in tid.Items) { data.IsVisible = IsExpanded; } } } private void DataVisiableChange(object sender, bool visiable) { this.Visibility = visiable ? Visibility.Visible : Visibility.Collapsed; //if (parent != null && parent is TreeDataGrid treeDataGrid) //{ // treeDataGrid.OnExpandedChange(visiable); //} } } }