我有以下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虚拟化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)