Как заставить XAML DataGridColumns заполнить весь DataGrid?
Я использую DataGrids в XAML (не Silverlight) с изменяемыми размерами столбцов, DataGrid будет расширяться, если пользователь изменяет размер экрана.
В настоящее время, если ширина всех столбцов DataGrid меньше ширины DataGrid, я получаю дополнительный "столбец", который не является кликабельным и не служит никакой цели.
кто-нибудь знает, как сделать один столбец всегда изменять, чтобы заполнить все оставшееся пространство?
9 ответов:
Если вы используете
Width="*"
столбец заполнится, чтобы расширить доступное пространство.Если вы хотите, чтобы все столбцы разделить поровну сетку применить ко всем столбцам. Если вы просто хотите заполнить оставшееся пространство, просто примените его к этому столбцу, а остальные будут "авто" или определенной шириной.
вы также можете использовать
Width="0.25*"
(например,) если вы хотите, чтобы столбец занимают 1/4 от ширины.
убедитесь, что ваш DataGrid есть
Width
установить что-то вроде{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
.так, Настройки на
DataGrid.Columns/DataGridXXXXColumn
элементы должны работать.
Как уже отмечалось, ColumnWidth="* " отлично работал для DataGrid в XAML.
я использовал его в данном контексте:
<DataGrid ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ColumnWidth="*"/>
Я добавил HorizontalAlignment= " Center "(по умолчанию" Strech"), и это решило мою проблему, потому что она сделала datagrid только настолько широким, насколько это необходимо. (Удалена настройка ширины datagrid, если она у вас есть.)
еще один спин на ту же тему:
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; } }
это не будет разворачивать последний столбец сетки xaml, чтобы занять оставшееся пространство, если
AutoGeneratedColumns="True"
.
для тех, кто ищет обходной путь 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 изменяется, когда пользователь разворачивает окно.