From 7122296f8160ab325ba5d752686dd488b5ab9a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Trommel?= Date: Tue, 16 Jun 2026 17:39:08 +0200 Subject: [PATCH 1/3] Revert of removed timer code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniƫl Trommel --- src/TableViewHeaderRow.cs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/TableViewHeaderRow.cs b/src/TableViewHeaderRow.cs index 2c302ba0..776a6590 100644 --- a/src/TableViewHeaderRow.cs +++ b/src/TableViewHeaderRow.cs @@ -41,6 +41,7 @@ public partial class TableViewHeaderRow : Control private Border? _columnDropIndicator; private TranslateTransform? _columnDropIndicatorTransform; private Image? _dragHeaderImage; + private DispatcherTimer? _desiredWidthTimer; private bool _calculatingHeaderWidths; private int _dropColumnIndex; private bool _isValidDropTarget; @@ -201,6 +202,27 @@ e.PropertyName is nameof(TableViewColumn.IsFrozen)) && CalculateHeaderWidths(); } } + else if (e.PropertyName is nameof(TableViewColumn.DesiredWidth)) + { + _desiredWidthTimer ??= new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(250) }; + _desiredWidthTimer.Tick -= OnDesiredWidthTimerTick; + _desiredWidthTimer.Tick += OnDesiredWidthTimerTick; + _desiredWidthTimer.Stop(); + _desiredWidthTimer.Start(); + } + } + + /// + /// Recalculates header widths after deferred desired-width updates. + /// + private void OnDesiredWidthTimerTick(object? sender, object e) + { + _desiredWidthTimer?.Stop(); + + if (!_calculatingHeaderWidths) + { + CalculateHeaderWidths(); + } } /// From b2b5d3bcb22c2425b5b3919723842c1ee0def44c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Trommel?= Date: Wed, 17 Jun 2026 21:59:03 +0200 Subject: [PATCH 2/3] For tableviews with no provided columns widths, when switching away and back to a tab with a tableview, the vertical gridlines form the rows would be misaligned from the header. The call in the OnLoaded fixes this. --- src/TableView.cs | 5 +++++ src/TableViewHeaderRow.cs | 1 + 2 files changed, 6 insertions(+) diff --git a/src/TableView.cs b/src/TableView.cs index 3168bff7..745bab85 100644 --- a/src/TableView.cs +++ b/src/TableView.cs @@ -375,6 +375,11 @@ private void OnScrollViewerLoaded(object sender, RoutedEventArgs e) /// private void OnLoaded(object sender, RoutedEventArgs e) { + if (_isItemsSourceSuspended) // indicates that the control was unloaded and loaded back + { + HeaderRow?.CalculateHeaderWidths(); // Needed when switching back to an existing TableView (without provided column Widths) + } + ResumeItemsSource(); EnsureAutoColumns(); } diff --git a/src/TableViewHeaderRow.cs b/src/TableViewHeaderRow.cs index 776a6590..6aed1b71 100644 --- a/src/TableViewHeaderRow.cs +++ b/src/TableViewHeaderRow.cs @@ -204,6 +204,7 @@ e.PropertyName is nameof(TableViewColumn.IsFrozen)) && } else if (e.PropertyName is nameof(TableViewColumn.DesiredWidth)) { + // Coalesce multiple updates (see in-loop Measure() call in CalculateHeaderWidths) to avoid excessive header width calculations. _desiredWidthTimer ??= new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(250) }; _desiredWidthTimer.Tick -= OnDesiredWidthTimerTick; _desiredWidthTimer.Tick += OnDesiredWidthTimerTick; From 80c13f0700ab77a52d76ec4b87f0492295795034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Trommel?= Date: Wed, 17 Jun 2026 22:30:09 +0200 Subject: [PATCH 3/3] Rename due to merged changes from main --- src/TableView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TableView.cs b/src/TableView.cs index 79b7064a..206d74e4 100644 --- a/src/TableView.cs +++ b/src/TableView.cs @@ -394,7 +394,7 @@ private void OnLoaded(object sender, RoutedEventArgs e) { if (_isItemsSourceSuspended) // indicates that the control was unloaded and loaded back { - HeaderRow?.CalculateHeaderWidths(); // Needed when switching back to an existing TableView (without provided column Widths) + _headerRow?.CalculateHeaderWidths(); // Needed when switching back to an existing TableView (without provided column Widths) } ResumeItemsSource();