Windows Phone 8.0 列表框内存不足扩展
Windows Phone 8.0 ListBox Out Of Memory Extension
对不起我的英语。
我执行下一个代码:
在 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") } });
}
...
此代码有效,但如果我点击按钮几次,就会出现异常 "Out Of Memory Extension"
我尝试使用垃圾收集器和自动缓存,但错误仍然存在。
我在下一个屏幕截图中看到了这个扩展:
我认为当您的 ListBox
在另一个 ScrollViewer
或 StackPanel
中时可能会发生这种情况。通常 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
必须知道其视口的大小才能优化项目渲染。
对不起我的英语。 我执行下一个代码: 在 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") } });
}
...
此代码有效,但如果我点击按钮几次,就会出现异常 "Out Of Memory Extension"
我尝试使用垃圾收集器和自动缓存,但错误仍然存在。
我在下一个屏幕截图中看到了这个扩展:
我认为当您的 ListBox
在另一个 ScrollViewer
或 StackPanel
中时可能会发生这种情况。通常 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
必须知道其视口的大小才能优化项目渲染。