ItemsControl, VirtualizingStackPanel et ScrollViewer hauteur
Je veux afficher une liste importante d'éléments à l'aide d'un ItemsControl.
La raison pour laquelle je suis à l'aide d'un ItemsControl, c'est que le DataTemplate est beaucoup plus complexe dans l'application que je suis en train de travailler sur: L'exemple de code fourni ne reflète le dimensionnement problème que j'ai.
Je voudrais :
- ItemsControl à être virtualisés, car il ya de nombreux éléments à afficher
- sa taille pour l'étendre à son conteneur parent automatiquement (la Grille)
<Grid> <ItemsControl x:Name="My" ItemsSource="{Binding Path=Names}"> <ItemsControl.Template> <ControlTemplate> <StackPanel> <StackPanel> <TextBlock Text="this is a title" FontSize="15" /> <TextBlock Text="This is a description" /> </StackPanel> <ScrollViewer CanContentScroll="True" Height="400px"> <VirtualizingStackPanel IsItemsHost="True" /> </ScrollViewer> </StackPanel> </ControlTemplate> </ItemsControl.Template> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Grid>
Le code derrière est :
public partial class Page1: Page
{
public List<string> Names { get; set; }
public Page1()
{
InitializeComponent();
Names = new List<string>();
for(int i = 0; i < 10000; i++)
Names.Add("Name : " + i);
My.DataContext = this;
}
}
Que je me force à le ScrollViewer hauteur de 400px, ItemsControl la virtualisation des œuvres que j'attends: Le ItemsControl affiche la liste très rapidement, quel que soit le nombre d'éléments qu'elle contient.
Cependant, si je supprime Height="400px", la liste va étendre sa hauteur pour afficher la totalité de la liste, indépendamment de son conteneur parent hauteur. Pire: il semble derrière de son contenant.
Mettre un scrollviewer autour de la ItemsControl exprime le résultat visuel, mais la virtualisation s'en va et la liste prend trop de temps à afficher.
Comment puis-je obtenir à la fois automatique de la hauteur de l'expansion et de la virtualisation de mon ItemsControl ?
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
Le problème est dans le ItemsControl.Modèle: vous utilisez StackPanel là, ce qui donne à ses enfants autant en hauteur qu'ils veulent. Le remplacer par quelque chose comme
Et il devrait fonctionner correctement.
Espère que cela aide.
OriginalL'auteur