2011-09-23 4 views
1

J'ai une application WPF avec un DataGrid contenant 10 DataGridTemplateColumns. Lorsque je lie une collection d'objets à la grille de données, ils s'affichent tous correctement dans la grille. Le seul problème est que si j'ai plus de lignes que ne le fera l'écran sans barres de défilement, les colonnes s'auto-dimensionner uniquement pour correspondre aux valeurs qui sont à l'écran. Si, par exemple, je défile vers le bas et arrive à une rangée où la valeur de la colonne 1 ne rentre pas, alors la colonne 1 s'auto-dimensionnera pour l'ajuster. C'est vraiment énervant. N'y a-t-il aucun moyen de l'adapter automatiquement à tous les éléments de la collection, qu'ils soient ou non à l'écran? J'ai essayé de définir la propriété width de chaque colonne sur Auto, mais cela n'a rien fait. Merci d'avance pour toute aideDimensionnement DataGridTemplateColumn

+0

Pouvez-vous publier le code XAML pour votre DataGrid? J'ai quelques idées ... mais quand j'ai essayé de créer quelque chose qui reproduit votre problème ... je ne pouvais pas. Edit: Nevermind ... J'ai trouvé un moyen de le reproduire. – Scott

Répondre

1

Le problème est dû au fait que les lignes de la grille de données sont virtualisées. Les éléments non affichés à l'écran n'ont donc pas besoin d'être dessinés (ou leurs tailles sont calculées) tant qu'ils ne doivent pas être affichés.

Vous pouvez activer la virtualisation hors comme ceci:

<DataGrid VirtualizingStackPanel.IsVirtualizing="False" HorizontalScrollBarVisibility="Hidden"> 

Notez, cependant, que cela peut causer votre DataGrid charger plus lent si vous avez beaucoup d'éléments en raison du fait que tous les éléments seront ' dessiné 'même lorsqu'il n'apparaît pas sur l'écran.

+0

cela résout mon problème mais vous avez raison de le ralentir. il le ralentit tellement qu'il n'est pas vraiment utilisable. Merci de votre aide –