c# - examples - wpf datagrid columns
¿Cómo hago que XAML DataGridColumns llene todo el DataGrid? (9)
Estoy utilizando DataGrids en XAML (no Silverlight) con columnas redimensionables, DataGrid se expandirá si el usuario cambia el tamaño de la pantalla.
Actualmente, si el ancho de todas las columnas de DataGrid es inferior al ancho de DataGrid, aparece una "columna" adicional que no se puede hacer clic y no sirve para nada.
¿Alguien sabe cómo hacer que una columna cambie de tamaño para llenar todo el espacio restante?
Agregué un HorizontalAlignment = "Center" (El valor predeterminado es "Strech") y resolvió mi problema porque hizo que la cuadrícula de datos solo fuera lo más amplia posible. (Se eliminó la configuración de Ancho de la cuadrícula de datos si tiene una).
Asegúrese de que su DataGrid tenga el Width
establecido en algo como {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
.
Así, su configuración de Width="*"
atributo en DataGrid.Columns/DataGridXXXXColumn
elementos debería funcionar.
Como se indicó, ColumnWidth = "*" funcionó perfectamente para DataGrid en XAML.
Lo usé en este contexto:
<DataGrid ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ColumnWidth="*"/>
Establezca la propiedad Width
las columnas para que tenga un ancho proporcional, como *
Esto no expandirá la última columna de la grilla xaml para tomar el espacio restante si AutoGeneratedColumns="True"
.
Otro giro sobre el mismo tema:
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;
}
}
Para aquellos que buscan una solución C #:
Si necesita alguna razón para tener habilitada la opción "AutoGeneratedColumns", una cosa que puede hacer es especificar el ancho de todas las columnas, excepto las que desea cambiar automáticamente de tamaño ( no ocupará el espacio restante , pero cambiará el tamaño del contenido de la celda ).
Ejemplo (dgShopppingCart es mi 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;
Para mí funciona como una solución alternativa porque necesitaba que se cambiara el tamaño del DataGrid cuando el usuario maximiza la ventana.
establecer el ancho de UNA columna a cualquier valor, es decir, ancho = "*"
Si usa Width="*"
la columna se llenará para expandir el espacio disponible.
Si desea que todas las columnas dividan la cuadrícula, aplique esto a todas las columnas. Si solo quiere que uno complete el espacio restante, simplemente aplíquelo a esa columna, y el resto será "Auto" o un ancho específico.
También puede usar Width="0.25*"
(por ejemplo) si desea que la columna ocupe 1/4 del ancho disponible.