Как сделать так, чтобы XAML DataGridColumns заполнял всю DataGrid? - PullRequest
109 голосов
/ 17 февраля 2011

Я использую DataGrids в XAML (не Silverlight) со столбцами с изменяемым размером, DataGrid будет расширяться, если пользователь изменяет размер экрана.

В настоящее время, если ширина всех столбцов DataGrid меньше шириныDataGrid У меня появляется дополнительный «столбец», который не может быть кликабелен и не имеет смысла.

Кто-нибудь знает, как заставить один столбец всегда изменять размер, чтобы заполнить все оставшееся пространство?

Ответы [ 9 ]

227 голосов
/ 17 февраля 2011

Если вы используете Width="*", столбец заполнится, чтобы расширить доступное пространство.

Если вы хотите, чтобы все столбцы делили сетку в равной степени, примените это ко всем столбцам. Если вы просто хотите, чтобы один из них заполнил оставшееся пространство, просто примените его к этому столбцу, оставив "Авто" или определенную ширину.

Вы также можете использовать Width="0.25*" (например), если хотите, чтобы столбец занимал 1/4 доступной ширины.

16 голосов
/ 05 августа 2014

Убедитесь, что в вашей DataGrid Width установлено что-то вроде {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}.

Таким образом, ваша установка атрибута Width="*" для DataGrid.Columns/DataGridXXXXColumn элементов должна работать.

7 голосов
/ 04 ноября 2017

Как уже отмечалось, ColumnWidth="*" отлично работал для DataGrid в XAML.

Я использовал это в этом контексте:

<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
6 голосов
/ 17 февраля 2011

Установите для свойства столбцов Width пропорциональную ширину, например *

1 голос
/ 12 ноября 2015

Еще одно вращение на ту же тему:

protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    dataGrid.Width = e.NewSize.Width - (e.NewSize.Width * .1);

    foreach (var column in dataGrid.Columns)
    {
       column.Width = dataGrid.Width / dataGrid.Columns.Count;
    }
 }
1 голос
/ 09 июня 2015

Я добавил HorizontalAlignment = "Center" (по умолчанию "Strech"), и это решило мою проблему, потому что это сделало сетку данных настолько широкой, насколько это необходимо. (Удалена настройка ширины сетки данных, если она у вас есть.)

enter image description here

0 голосов
/ 26 июня 2015

Для тех, кто ищет обходной путь C #:

Если вам по какой-то причине нужно включить «AutoGeneratedColumns», вы можете указать одну ширину всех столбцов, кроме тех, которые вы хотите использовать.с автоматическим изменением размера ( не займет оставшееся пространство , но изменит размер содержимого ячейки ).

Пример (dgShopppingCart - это моя DataGrid):

dgShoppingCart.Columns[0].Visibility = Visibility.Hidden; 
dgShoppingCart.Columns[1].Header = "Qty";
dgShoppingCart.Columns[1].Width = 100;
dgShoppingCart.Columns[2].Header = "Product Name"; /*This will be resized to cell content*/
dgShoppingCart.Columns[3].Header = "Price";
dgShoppingCart.Columns[3].Width = 100;
dgShoppingCart.Columns[4].Visibility = Visibility.Hidden; 

Для меня это работает как обходной путь, потому что мне нужно было изменить размер DataGrid, когда пользователь максимизирует окно.

0 голосов
/ 12 мая 2015

установить ширину ОДНОГО столбца на любое значение, то есть width = "*"

0 голосов
/ 14 июля 2014

Это не расширит последний столбец сетки xaml, чтобы занять оставшееся место, если AutoGeneratedColumns="True".

...