} // InitColumns // ---------------------------------------------------------------------- protected virtual void ResizeColumns() { if (listView == null || listView.Columns.Count == 0) { return; } // listview width double actualWidth = double.PositiveInfinity; if (this.scrollViewer != null) { actualWidth = this.scrollViewer.ViewportWidth; } if (double.IsInfinity(actualWidth)) { actualWidth = this.listView.ActualWidth; } if (double.IsInfinity(actualWidth) || actualWidth <= 0) { return; } double resizeableRegionCount = 0; double otherColumnsWidth = 0; // determine column sizes foreach (GridViewColumn gridViewColumn in listView.Columns) { if (ProportionalColumn.IsProportionalColumn(gridViewColumn)) { resizeableRegionCount += ProportionalColumn.GetProportionalWidth(gridViewColumn).Value; } else { otherColumnsWidth += gridViewColumn.ActualWidth; } } if (resizeableRegionCount <= 0) { // no proportional columns present: commit the regulation to the scroll viewer this.scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; // search the first fill column GridViewColumn fillColumn = null; for (int i = 0; i < listView.Columns.Count; i++) { GridViewColumn gridViewColumn = listView.Columns[i]; if (IsFillColumn(gridViewColumn)) { fillColumn = gridViewColumn; break; } } if (fillColumn != null) { double otherColumnsWithoutFillWidth = otherColumnsWidth - fillColumn.ActualWidth; double fillWidth = actualWidth - otherColumnsWithoutFillWidth; if (fillWidth > 0) { double?minWidth = RangeColumn.GetRangeMinWidth(fillColumn); double?maxWidth = RangeColumn.GetRangeMaxWidth(fillColumn); bool setWidth = true; if (minWidth.HasValue && fillWidth < minWidth.Value) { setWidth = false; } if (maxWidth.HasValue && fillWidth > maxWidth.Value) { setWidth = false; } if (setWidth) { this.scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; fillColumn.Width = fillWidth; } } } return; } double resizeableColumnsWidth = actualWidth - otherColumnsWidth; if (resizeableColumnsWidth <= 0) { return; // missing space } // resize columns double resizeableRegionWidth = resizeableColumnsWidth / resizeableRegionCount; foreach (GridViewColumn gridViewColumn in listView.Columns) { if (ProportionalColumn.IsProportionalColumn(gridViewColumn)) { gridViewColumn.Width = ProportionalColumn.GetProportionalWidth(gridViewColumn).Value *resizeableRegionWidth; } } } // ResizeColumns