/// /// Sets the column widths. /// private static void SetColumnWidths(System.Windows.Controls.ListView listView) { if (listView.View is not GridView gridView) { return; } double specifiedWidth = 0; var columns = GetStretchDataCache(listView); if (columns == null) { //Instance if its our first run. columns = new List <GridViewColumn>(); // Get all columns with no width having been set. foreach (var column in gridView.Columns) { if (!(column.Width >= 0)) { columns.Add(column); } else { specifiedWidth += column.ActualWidth; } } } else { // Get all columns with no width having been set. foreach (var column in gridView.Columns) { if (!columns.Contains(column)) { specifiedWidth += column.ActualWidth; } } } // Allocate remaining space equally. GridViewColumn?lastColumn = default; foreach (var column in columns) { var newWidth = (listView.ActualWidth - specifiedWidth) / columns.Count; if (newWidth >= 10) { column.Width = newWidth - 10; } lastColumn = column; } // Reclaim space for the vertical scroll bar. if (lastColumn != null) { var scrollView = listView.FindChild <ScrollViewer>(); if (scrollView?.ComputedVerticalScrollBarVisibility == Visibility.Visible) { if (lastColumn.Width > SystemParameters.VerticalScrollBarWidth) { lastColumn.Width -= SystemParameters.VerticalScrollBarWidth; } } } //Store the columns in the Tag property for later use. SetStretchDataCache(listView, columns); }