private/styles/Set-DataGridStyle.ps1

function Set-DataGridStyle {
    <#
    .SYNOPSIS
        Applies theme-aware styling to a DataGrid control.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Windows.Controls.DataGrid]$Grid,
        
        [ValidateSet('Single', 'Extended')]
        [string]$SelectionMode = 'Extended'
    )

    # Try to apply the Modern XAML style
    $styleApplied = $false
    try {
        if ($null -ne [System.Windows.Application]::Current) {
            $style = [System.Windows.Application]::Current.TryFindResource('ModernDataGridStyle')
            if ($null -ne $style) {
                $Grid.Style = $style
                $styleApplied = $true
            }
        }
    }
    catch {
        Write-Verbose "Failed to apply ModernDataGridStyle from resources: $_"
    }

    # Always apply non-style configuration
    $Grid.GridLinesVisibility = [System.Windows.Controls.DataGridGridLinesVisibility]::Horizontal
    $Grid.HeadersVisibility = [System.Windows.Controls.DataGridHeadersVisibility]::Column
    $Grid.RowHeaderWidth = 0
    $Grid.AutoGenerateColumns = $false
    $Grid.CanUserAddRows = $false
    $Grid.CanUserResizeRows = $false
    $Grid.CanUserResizeColumns = $true
    $Grid.CanUserSortColumns = $true
    $Grid.CanUserReorderColumns = $true
    $Grid.SelectionMode = [System.Windows.Controls.DataGridSelectionMode]::$SelectionMode
    $Grid.SelectionUnit = [System.Windows.Controls.DataGridSelectionUnit]::FullRow
    $Grid.FontFamily = [System.Windows.Media.FontFamily]::new('Segoe UI')
    $Grid.FontSize = 12
    $Grid.Margin = [System.Windows.Thickness]::new(0)
    $Grid.AlternationCount = 2
    $Grid.BorderThickness = [System.Windows.Thickness]::new(1)
    
    # Row virtualization - without this, large datasets murder the UI
    $Grid.EnableRowVirtualization = $true
    $Grid.EnableColumnVirtualization = $true
    [System.Windows.Controls.VirtualizingPanel]::SetIsVirtualizing($Grid, $true)
    [System.Windows.Controls.VirtualizingPanel]::SetVirtualizationMode($Grid, [System.Windows.Controls.VirtualizationMode]::Recycling)
    [System.Windows.Controls.VirtualizingPanel]::SetScrollUnit($Grid, [System.Windows.Controls.ScrollUnit]::Pixel)
}