Windows Phone芒果列表框滚动

时间:2011-12-13 10:07:22

标签: windows-phone-7 listbox

我创建了一个简单的应用程序,其中包含ListBox和1000个非常短的字符串。 (没有明确的ItemTemplate)。 如果我真的很快滚动它 - 有黑洞(我认为CPU不能快速渲染)。

同时如果我在ItemsControl中使用ScrollViewer - 一切都还可以。

为什么?能以某种方式减慢ListBox的滚动速度吗? 当用户在屏幕上看到这些黑洞时,他们会感到非常困惑。

更新:在设备上重现(HTC HD7 7.10.7740)。我通过ItemSource

使用数据绑定

Repro项目:https://www.dropbox.com/s/lgcod878srnctp0/SLTK_LLS_TEST.zip

Repro video(!):https://www.dropbox.com/s/t25dguq0vaa88o9/WP_20111213_113729Z.mp4

2 个答案:

答案 0 :(得分:4)

默认情况下ListBox启用了“虚拟化”(确切地说:类似于UI容器虚拟化),它不会加载完整列表,只是片段。滚动时,必须先渲染项目,当您快速滚动时,您会注意到此渲染延迟。这是由VirtualizingStackPanel实现的。优点是,它节省了内存。

使用自定义ItemsPanel时,您可以停用虚拟化:

<ListBox x:Name="YourListbox">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

...但解决方案将从一开始就占用更多资源。长长的名单可能会变得危险。

反过来说,你可以enable virtualization on your ItemsControl,为了测试目的,你应该能够实现渲染延迟(“黑洞”)。

答案 1 :(得分:1)

你的琴弦有多长?这是否可以轻松而明智地分成一个非常简短的摘要(8-10个字符)?如果是这样,你可能想看一下试图解决这个问题的LazyListBox(它的目的是为了比你所说的更复杂的布局,所以好处可以忽略不计)