using System;
|
using System.Collections;
|
using System.Windows;
|
using System.Windows.Controls;
|
|
namespace HMI.UI
|
{
|
public class TreeDataGrid : DataGrid
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public event EventHandler<bool> 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);
|
//}
|
}
|
}
|
}
|