首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ItemsControl、VirtualizingStackPanel和ScrollViewer高度

ItemsControl、VirtualizingStackPanel和ScrollViewer高度
EN

Stack Overflow用户
提问于 2009-10-16 07:28:07
回答 1查看 12.8K关注 0票数 9

我想使用ItemsControl显示一个重要的项目列表。

我使用ItemsControl的原因是,在我正在处理的应用程序中,DataTemplate要复杂得多:提供的示例代码只反映了我遇到的大小调整问题。

我想:

  • 需要虚拟化的ItemsControl,因为有许多项要显示
  • ,它的大小可以自动扩展到其父容器(网格)

背后的代码是:

代码语言:javascript
复制
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 to时,ItemsControl虚拟化就像我预期的那样工作:不管它包含多少项,ItemsControl显示列表的速度都非常快。

但是,如果删除Height=“400 to”,则列表将扩展其高度以显示整个列表,而不管其父容器的高度如何。更糟的是:它出现在它的容器后面。

在ItemsControl周围放置一个滚动查看器会提供预期的可视化结果,但是虚拟化会消失,列表需要太多的时间来显示。

如何实现ItemsControl的自动高度扩展和虚拟化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-16 14:34:35

问题在于ItemsControl.Template:您可以在那里使用StackPanel,这样她的孩子就能得到他们想要的高度。把它替换成

代码语言:javascript
复制
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel>
        <TextBlock Text="this is a title" FontSize="15" />
        <TextBlock Text="This is a description" />
    </StackPanel>
    <ScrollViewer CanContentScroll="True" Grid.Row="1">
        <VirtualizingStackPanel />
    </ScrollViewer>
</Grid>

而且它应该能正常工作。

希望能帮上忙。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1576623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档