I am using DataGrids in XAML (not Silverlight) with resizable columns, the DataGrid will expand if the user resizes the screen.
Currently if the widths of all the DataGrid columns are less than the width of the DataGrid I get an extra "column" appearing which is unclickable and serves no purpose.
Does anyone know how to make one column always resize to fill all the remaining space?
I added a HorizontalAlignment="Center" (The default is "Strech") and it solved my problem because it made the datagrid only as wide as needed. (Removed the datagrid's Width setting if you have one.)
If you use
Width="*"
the column will fill to expand the available space.If you want all columns to divide the grid equally apply this to all columns. If you just want one to fill the remaining space just apply it to that column with the rest being "Auto" or a specific width.
You can also use
Width="0.25*"
(for example) if you want the column to take up 1/4 of the available width.For those looking for a C# workaround:
If you need for some reason to have the "AutoGeneratedColumns" enabled, one thing you can do is to specify all the columns's width except the ones you want to be auto resized (it will not take the remaining space, but it will resize to the cell's content).
Example (dgShopppingCart is my DataGrid):
For me it works as a workaround because I needed to have the DataGrid resized when the user maximize the Window.
Set the columns
Width
property to be a proportional width such as*
As noted, the ColumnWidth="*" worked perfectly well for a DataGrid in XAML.
I used it in this context:
This will not expand the last column of the xaml grid to take the remaining space if
AutoGeneratedColumns="True"
.