J'utilise DataGrids en XAML (et non Silverlight) avec des colonnes redimensionnables. DataGrid se développera si l'utilisateur redimensionne l'écran.
Actuellement, si les largeurs de toutes les colonnes de DataGrid sont inférieures à la largeur de DataGrid, une "colonne" supplémentaire apparaît, qui est non cliquable et ne sert à rien.
Est-ce que quelqu'un sait comment faire qu'une colonne soit toujours redimensionnée pour remplir tout l'espace restant?
Si tu utilises Width="*"
la colonne se remplira pour agrandir l’espace disponible.
Si vous voulez que toutes les colonnes divisent la grille, appliquez-la également à toutes les colonnes. Si vous voulez simplement remplir l’espace restant, appliquez-le à cette colonne, le reste étant "Auto" ou une largeur spécifique.
Vous pouvez aussi utiliser Width="0.25*"
(par exemple) si vous voulez que la colonne occupe 1/4 de la largeur disponible.
Assurez-vous que votre DataGrid a Width
défini sur quelque chose comme: {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
.
Comme ça, votre réglage de Width="*"
attribut sur DataGrid.Columns/DataGridXXXXColumn
_ éléments devraient fonctionner.
Comme indiqué, le ColumnWidth="*"
fonctionne parfaitement pour un DataGrid en XAML.
Je l'ai utilisé dans ce contexte:
<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Définissez la propriété columns Width
de manière à avoir une largeur proportionnelle telle que *
J'ai ajouté un HorizontalAlignment = "Center" (la valeur par défaut est "Strech") et cela a résolu mon problème, car la grille de données n'était plus large que nécessaire. (Suppression du paramètre Largeur de la grille de données si vous en avez un.)
Un autre tour sur le même thème:
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;
}
}
Pour ceux qui recherchent une solution de contournement C #:
Si vous avez besoin, pour une raison quelconque, d'activer "AutoGeneratedColumns", vous pouvez notamment spécifier la largeur de toutes les colonnes, à l'exception de celles que vous souhaitez redimensionner automatiquement (cela ne prendra pas l'espace restant , mais ce sera redimensionner au contenu de la cellule).
Exemple (dgShopppingCart est mon 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;
Pour moi, cela fonctionne comme une solution de contournement, car je devais redimensionner le DataGrid lorsque l'utilisateur agrandissait la fenêtre.
définir la largeur d'une colonne sur n'importe quelle valeur, c'est-à-dire width = "*"
Cela ne développera pas la dernière colonne de la grille xaml pour occuper l’espace restant si AutoGeneratedColumns="True"
.
Mon 2 Cent ->
Très tard pour faire la fête
DataGrid -> Column -> Width = "*" ne fonctionne que si le conteneur parent de DataGrid a une largeur fixe.
exemple: je mets le DataGrid dans Grid -> Column dont width = "Auto" puis Width = "*" dans DataGrid ne fonctionne pas, mais si vous définissez Grid -> Column Width = "450" signifie fixé puis fonctionne correctement