Browse Source

Merge pull request #6748 from AvaloniaUI/bugfix/6668-fix-datagrid-headers-scrolling

Fix DataGrid headers horizontal scrolling
pull/6776/head
Max Katz 5 years ago
committed by GitHub
parent
commit
17ede51fc8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      src/Avalonia.Controls.DataGrid/DataGrid.cs

18
src/Avalonia.Controls.DataGrid/DataGrid.cs

@ -2223,6 +2223,7 @@ namespace Avalonia.Controls
if (IsEnabled && DisplayData.NumDisplayedScrollingElements > 0) if (IsEnabled && DisplayData.NumDisplayedScrollingElements > 0)
{ {
var handled = false; var handled = false;
var ignoreInvalidate = false;
var scrollHeight = 0d; var scrollHeight = 0d;
// Vertical scroll handling // Vertical scroll handling
@ -2252,8 +2253,7 @@ namespace Avalonia.Controls
// Horizontal scroll handling // Horizontal scroll handling
if (delta.X != 0) if (delta.X != 0)
{ {
var originalHorizontalOffset = HorizontalOffset; var horizontalOffset = HorizontalOffset - delta.X;
var horizontalOffset = originalHorizontalOffset - delta.X;
var widthNotVisible = Math.Max(0, ColumnsInternal.VisibleEdgedColumnsWidth - CellsWidth); var widthNotVisible = Math.Max(0, ColumnsInternal.VisibleEdgedColumnsWidth - CellsWidth);
if (horizontalOffset < 0) if (horizontalOffset < 0)
@ -2265,16 +2265,20 @@ namespace Avalonia.Controls
horizontalOffset = widthNotVisible; horizontalOffset = widthNotVisible;
} }
if (horizontalOffset != originalHorizontalOffset) if (UpdateHorizontalOffset(horizontalOffset))
{ {
HorizontalOffset = horizontalOffset; // We don't need to invalidate once again after UpdateHorizontalOffset.
ignoreInvalidate = true;
handled = true; handled = true;
} }
} }
if (handled) if (handled)
{ {
InvalidateRowsMeasure(invalidateIndividualElements: false); if (!ignoreInvalidate)
{
InvalidateRowsMeasure(invalidateIndividualElements: false);
}
return true; return true;
} }
} }
@ -2932,7 +2936,7 @@ namespace Avalonia.Controls
return SetCurrentCellCore(columnIndex, slot, commitEdit: true, endRowEdit: true); return SetCurrentCellCore(columnIndex, slot, commitEdit: true, endRowEdit: true);
} }
internal void UpdateHorizontalOffset(double newValue) internal bool UpdateHorizontalOffset(double newValue)
{ {
if (HorizontalOffset != newValue) if (HorizontalOffset != newValue)
{ {
@ -2940,7 +2944,9 @@ namespace Avalonia.Controls
InvalidateColumnHeadersMeasure(); InvalidateColumnHeadersMeasure();
InvalidateRowsMeasure(true); InvalidateRowsMeasure(true);
return true;
} }
return false;
} }
internal bool UpdateSelectionAndCurrency(int columnIndex, int slot, DataGridSelectionAction action, bool scrollIntoView) internal bool UpdateSelectionAndCurrency(int columnIndex, int slot, DataGridSelectionAction action, bool scrollIntoView)

Loading…
Cancel
Save