Мне удалось воспроизвести это.Вы не делаете ничего плохого, центральный столбец должен изменить размер при изменении размера окна.
Я добавил его в бэклог, за который вы можете проголосовать и проследить в этом пункте портала обратной связи:
https://feedback.telerik.com/Project/167/Feedback/Details/250207-datagrid-when-start-and-end-columns-are-auto-sized-the-middle-stretch-sized-col
Когда вы подписаны, вы будете уведомлены, когда есть изменения статуса элемента.
Обходной путь
Обходной путь, ты можешь попробовать.Если вы установите для столбца Stretchy SizeMode
значение Fixed
, вы можете вручную изменить его размер при изменении размера DataGrid.
Шаг 1 - Подписаться на DataGrid.SizedChanged
и установить Stretchy от SizeMode
до Fixed
<grid:RadDataGrid SizeChanged="DataGrid_OnSizeChanged" ...>
<grid:RadDataGrid.Columns>
...
<grid:DataGridTextColumn Header="Stretchy"
PropertyName="Stretch"
SizeMode="Fixed"
Width="200"/>
...
</grid:RadDataGrid.Columns>
</grid:RadDataGrid>
Шаг 2 - В OnSizeChanged
обновите ширину столбца Stretchy, используя доступное пространство (см. мои комментарии к коду)
private void DataGrid_OnSizeChanged(object sender, SizeChangedEventArgs e)
{
// for performance improvement only do this when the resize is larger than 1 px
if (e.NewSize.Width - e.PreviousSize.Width > 1)
return;
if (sender is RadDataGrid dg && dg.Columns.Count > 0)
{
var middleColumn = dg.Columns[3];
if (middleColumn == null)
return;
double autoColumnsWidthTotal = 0;
// iterate over all the other columns and add the total width
foreach (var column in dg.Columns)
{
if (column != middleColumn)
{
autoColumnsWidthTotal = autoColumnsWidthTotal + column.Width;
}
}
// Get the remaining with available for the "Stretchy" column
var remainingSpace = e.NewSize.Width - autoColumnsWidthTotal;
// Set the Stretchy column's width using the remaingin space
// IMPORTANT: You need to set the column's SizeMode to Fixed in order for it to respect the Width value.
middleColumn.Width = remainingSpace;
}
}