我想显示使用一个ItemsControl项目的重要名单。
为什么我使用一个ItemsControl的原因是DataTemplate中是在我工作的应用程序要复杂得多:只有提供的代码示例体现了大小的问题,我有。
我想要 :
- 进行虚拟化ItemsControl的,因为有很多是项目展示
其大小自动扩展到其父容器(网格)
<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>
后面的代码是:
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;
}
}
正如我强迫的ScrollViewer高度400像素,ItemsControl的虚拟化工程,我所期待的:ItemsControl中很快显示不管它有多少项包含列表。
但是,如果我删除HEIGHT =“400像素”,名单将扩大其高度来显示整个列表,无论它的父容器高度。 更糟的是:它似乎它的容器后面 。
把周围的ItemsControl的一个ScrollViewer中给出了预期的视觉效果,但虚拟化将消失,列表需要太多的时间来显示。
我怎样才能实现我的ItemsControl的两个自动高度扩展和虚拟化?