在Silverlight中使用ItemsControl进行UI虚拟化

在Silverlight中使用ItemsControl进行UI虚拟化,第1张

概述我正在尝试创建一个相当大的文本块的滚动列表.我希望有一个垂直滚动条来显示它们,如果它们溢出一定的大小,我希望它们显示省略号.我实际上所有这些工作都非常好. 我有以下Silverlight XAML: <Grid x:Name="LayoutRoot" MaxWidth="500" MinWidth="100" MaxHeight="500" MinHeight="100"> <Gr 我正在尝试创建一个相当大的文本块的滚动列表.我希望有一个垂直滚动条来显示它们,如果它们溢出一定的大小,我希望它们显示省略号.我实际上所有这些工作都非常好.

我有以下Silverlight XAML:

<GrID x:name="LayoutRoot" MaxWIDth="500" MinWIDth="100"    MaxHeight="500" MinHeight="100">    <GrID.DataContext>        <app:MainPageviewmodel/>    </GrID.DataContext>    <ScrollVIEwer>    <ItemsControl ItemsSource="{Binding TextItems}" margin="0,20,20">        <ItemsControl.ItemTemplate><DataTemplate>            <border MaxHeight="175" margin="0,18" CornerRadius="5">                <TextBlock margin="2" TextTrimming="WordEllipsis"                     textwrapPing="Wrap" Text="{Binding}"/>            </border>         </DataTemplate></ItemsControl.ItemTemplate>    </ItemsControl>    </ScrollVIEwer></GrID>

我的问题是这种布局不使用UI虚拟化,例如使用VirtualizingStackPanel.所以它很慢.将UI虚拟化纳入此布局的最佳方法是什么?我已经尝试了大约六种不同的方式,但没有任何方法能够很好地解决问题.

我设法让它在ListBox中工作,因为它似乎支持虚拟化开箱即用.但是,我更喜欢使用ItemsControl,因为我不希望这些东西可以选择,我不希望ListBox附带的样式.

这在Silverlight 4中.

解决方法 要完成这项工作,您需要做一些事情.

>为ItemsPanelTemplate设置
你的ItemsControl到了
VirtualizingStackPanel.
>将ScrollVIEwer合并到里面
一个ControlTemplate为您的
ItemsControl而不仅仅是
把它包在外面.
>确保ItemsControl具有固定高度,以便布局系统可以计算出填充视口所需的项目数. (看起来你已经通过将ItemsControl放在网格中来实现这一点 – 这将允许布局系统确定控件的分配高度)

这是我能想到的最简单的例子:

<ItemsControl ItemsSource="{Binding TextItems}">        <ItemsControl.ItemsPanel>            <ItemsPanelTemplate>                <VirtualizingStackPanel />            </ItemsPanelTemplate>        </ItemsControl.ItemsPanel>        <ItemsControl.Template>            <ControlTemplate targettype="ItemsControl">                <border>                    <ScrollVIEwer>                        <ItemsPresenter/>                    </ScrollVIEwer>                </border>            </ControlTemplate>        </ItemsControl.Template>    </ItemsControl>
总结

以上是内存溢出为你收集整理的在Silverlight中使用ItemsControl进行UI虚拟化全部内容,希望文章能够帮你解决在Silverlight中使用ItemsControl进行UI虚拟化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存