|
@@ -272,15 +272,18 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
_tree.SizeChanged += _tree_SizeChanged;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ private System.Windows.Controls.ScrollChangedEventHandler? _summaryScrollChangedHandler;
|
|
|
|
|
|
private void _tree_Loaded(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
Application.Current.Dispatcher.BeginInvoke(() =>
|
|
|
{
|
|
|
-
|
|
|
- _summaryRow = new Grid();
|
|
|
- _summaryRow.Visibility = Nodes is not null && Summaries.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
|
|
|
+ var firstTime = _summaryRow is null;
|
|
|
+ if (firstTime)
|
|
|
+ {
|
|
|
+ _summaryRow = new Grid();
|
|
|
+ _summaryRow.Visibility = Nodes is not null && Summaries.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
|
|
|
+ }
|
|
|
|
|
|
var scroll = _tree.FindChild<ScrollViewer>("PART_ScrollViewer");
|
|
|
if(scroll is not null)
|
|
@@ -288,47 +291,59 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
var grid = scroll.FindVisualChildren<Grid>(recursive: false).FirstOrDefault();
|
|
|
if(grid is not null)
|
|
|
{
|
|
|
- var row1 = grid.RowDefinitions[0];
|
|
|
- var row2 = grid.RowDefinitions[1];
|
|
|
- grid.RowDefinitions.Clear();
|
|
|
- grid.RowDefinitions.Add(row1);
|
|
|
- var rowDef = grid.AddRow(GridUnitType.Auto);
|
|
|
+ if (firstTime)
|
|
|
+ {
|
|
|
+ var row1 = grid.RowDefinitions[0];
|
|
|
+ var row2 = grid.RowDefinitions[1];
|
|
|
+ grid.RowDefinitions.Clear();
|
|
|
+ grid.RowDefinitions.Add(row1);
|
|
|
+ var rowDef = grid.AddRow(GridUnitType.Auto);
|
|
|
|
|
|
- grid.RowDefinitions.Add(row2);
|
|
|
+ grid.RowDefinitions.Add(row2);
|
|
|
|
|
|
- foreach(var child in grid.Children.OfType<UIElement>())
|
|
|
- {
|
|
|
- var row = Grid.GetRow(child);
|
|
|
- if(row >= 1)
|
|
|
+ foreach(var child in grid.Children.OfType<UIElement>())
|
|
|
{
|
|
|
- Grid.SetRow(child, row + 1);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var rowSpan = Grid.GetRowSpan(child);
|
|
|
- if(row + rowSpan >= 1 && child is ScrollBar)
|
|
|
+ var row = Grid.GetRow(child);
|
|
|
+ if(row >= 1)
|
|
|
+ {
|
|
|
+ Grid.SetRow(child, row + 1);
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- Grid.SetRowSpan(child, rowSpan + 1);
|
|
|
+ var rowSpan = Grid.GetRowSpan(child);
|
|
|
+ if(row + rowSpan >= 1 && child is ScrollBar)
|
|
|
+ {
|
|
|
+ Grid.SetRowSpan(child, rowSpan + 1);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- var horizontalScrollbar = grid.Children.OfType<ScrollBar>().First(x => x.Orientation == Orientation.Horizontal);
|
|
|
|
|
|
var treeGridPanel = scroll.FindChild<TreeGridPanel>("PART_TreeGridPanel");
|
|
|
|
|
|
- var summaryScroll = new ScrollViewer
|
|
|
+ var summaryScroll = grid.FindChild<ScrollViewer>("PART_SummaryScroll");
|
|
|
+ if (summaryScroll is null)
|
|
|
{
|
|
|
- VerticalScrollBarVisibility = ScrollBarVisibility.Hidden,
|
|
|
- HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden
|
|
|
- };
|
|
|
- summaryScroll.Content = _summaryRow;
|
|
|
+ summaryScroll = new ScrollViewer
|
|
|
+ {
|
|
|
+ VerticalScrollBarVisibility = ScrollBarVisibility.Hidden,
|
|
|
+ HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden,
|
|
|
+ Name = "PART_SummaryScroll"
|
|
|
+ };
|
|
|
+ summaryScroll.Content = _summaryRow;
|
|
|
|
|
|
- scroll.ScrollChanged += (o, e) =>
|
|
|
- {
|
|
|
- summaryScroll.ScrollToHorizontalOffset(scroll.HorizontalOffset);
|
|
|
+ if(_summaryScrollChangedHandler is not null)
|
|
|
+ {
|
|
|
+ scroll.ScrollChanged -= _summaryScrollChangedHandler;
|
|
|
+ }
|
|
|
+ _summaryScrollChangedHandler = (o, e) =>
|
|
|
+ {
|
|
|
+ summaryScroll.ScrollToHorizontalOffset(scroll.HorizontalOffset);
|
|
|
+ };
|
|
|
+ scroll.ScrollChanged += _summaryScrollChangedHandler;
|
|
|
|
|
|
- var panel = treeGridPanel;
|
|
|
- };
|
|
|
+ grid.AddChild(summaryScroll, 1, 0);
|
|
|
+ }
|
|
|
|
|
|
var transform = new TranslateTransform();
|
|
|
summaryScroll.RenderTransform = transform;
|
|
@@ -355,8 +370,7 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
{
|
|
|
UpdateSize(treeGridPanel.ActualHeight);
|
|
|
};
|
|
|
-
|
|
|
- grid.AddChild(summaryScroll, 1, 0);
|
|
|
+ UpdateSize(treeGridPanel.ActualHeight);
|
|
|
}
|
|
|
}
|
|
|
|