From 42ed2819b8574fc55cf0d35ad8c5390e752ce53c Mon Sep 17 00:00:00 2001 From: rbalsleyMSFT <53497092+rbalsleyMSFT@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:29:09 -0700 Subject: [PATCH] Fixes header checkbox alignment in grid view Wraps the "Select All" header checkbox in a custom container to mirror the padding and layout used by data rows. Removes default padding and enforces strict vertical and horizontal centering, ensuring consistent visual alignment between the header and cell content. --- .../FFUUI.Core/FFUUI.Core.Shared.psm1 | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/FFUDevelopment/FFUUI.Core/FFUUI.Core.Shared.psm1 b/FFUDevelopment/FFUUI.Core/FFUUI.Core.Shared.psm1 index a120d32..12425bc 100644 --- a/FFUDevelopment/FFUUI.Core/FFUUI.Core.Shared.psm1 +++ b/FFUDevelopment/FFUUI.Core/FFUUI.Core.Shared.psm1 @@ -343,7 +343,8 @@ function Add-SelectableGridViewColumn { # Create the "Select All" CheckBox for the header $headerCheckBox = New-Object System.Windows.Controls.CheckBox $headerCheckBox.HorizontalAlignment = [System.Windows.HorizontalAlignment]::Center - + $headerCheckBox.VerticalAlignment = [System.Windows.VerticalAlignment]::Center + # Store header metadata, including whether select-all should only affect visible rows. $headerTagObject = [PSCustomObject]@{ PropertyName = $IsSelectedPropertyName @@ -412,11 +413,33 @@ function Add-SelectableGridViewColumn { } }) + # Wrap the header checkbox in a stretched container so it centers the same way as row cells. + # Apply a small left inset to mirror the Fluent ListViewItem content padding used by data rows. + $headerBorder = New-Object System.Windows.Controls.Border + $headerBorder.Padding = New-Object System.Windows.Thickness(12, 0, 0, 0) + $headerBorder.HorizontalAlignment = [System.Windows.HorizontalAlignment]::Stretch + $headerBorder.VerticalAlignment = [System.Windows.VerticalAlignment]::Stretch + + $headerGrid = New-Object System.Windows.Controls.Grid + $headerGrid.HorizontalAlignment = [System.Windows.HorizontalAlignment]::Stretch + $headerGrid.VerticalAlignment = [System.Windows.VerticalAlignment]::Stretch + $headerGrid.Children.Add($headerCheckBox) | Out-Null + $headerBorder.Child = $headerGrid + + # Use an explicit GridViewColumnHeader so we can remove the default header padding + # and control the checkbox alignment explicitly. + $selectableHeader = New-Object System.Windows.Controls.GridViewColumnHeader + $selectableHeader.HorizontalContentAlignment = [System.Windows.HorizontalAlignment]::Stretch + $selectableHeader.VerticalContentAlignment = [System.Windows.VerticalAlignment]::Stretch + $selectableHeader.Padding = New-Object System.Windows.Thickness(0) + $selectableHeader.Margin = New-Object System.Windows.Thickness(0) + $selectableHeader.Content = $headerBorder + $State.Controls[$HeaderCheckBoxKeyName] = $headerCheckBox WriteLog "Add-SelectableGridViewColumn: Stored header checkbox in State.Controls with key '$HeaderCheckBoxKeyName'." $selectableColumn = New-Object System.Windows.Controls.GridViewColumn - $selectableColumn.Header = $headerCheckBox + $selectableColumn.Header = $selectableHeader $selectableColumn.Width = $ColumnWidth $cellTemplate = New-Object System.Windows.DataTemplate