Windows Phone 8.0 ListBox Out of Memory Extension

时间:2015-02-24 12:06:19

标签: windows-phone-8 listbox out-of-memory

抱歉我的英文。 我执行下一个代码: 在XAML中 ...

<Button Content="Add More" Width="160"  Click="Button_Click_2"/>  
<ListBox x:Name="list"/>

...

CS中的

...

 for (int i = 0; i < 20; i++)
            {
             list.Items.Add(new Image { Source = new BitmapImage { UriSource = new Uri("http://pravda-team.ru/eng/image/photo/4/7/4/73474.jpeg") } });
            }

...

此代码有效,但如果我点击按钮几次,则会出现异常&#34; Out Of Memory Extension&#34; 我尝试使用垃圾收集器和自动缓存,但错误仍然存​​在。 我在下一个屏幕截图中看到了这个扩展: enter image description here

1 个答案:

答案 0 :(得分:2)

我认为当ListBox位于另一个ScrollViewerStackPanel内时,可能会发生这种情况。通常ListBox有自己的ScrollViewer,它只呈现当前可见的项目。但是,如果您将ListBox置于ScrollViewer内,则必须呈现整个ListBox,并且您将达到内存异常。

此布局会导致问题:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Button Content="add more"
            Grid.Row="1" Click="Button_Click"/>
    <ListBox x:Name="list1" Grid.Row="0"/>
</StackPanel>

但是这个会很好,快速和顺利地工作:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ListBox x:Name="list1" Grid.Row="0"/>
    <Button Content="add more"
            Grid.Row="1" Click="Button_Click"/>
</Grid>

如果您希望ListBox正确滚动,则必须限制其大小。您可以将它放在Grid布局中,但设置硬编码高度也可以。 ListBox必须知道其视口的大小才能优化项呈现。