Example #1
0
        ///
        /// 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);
        }