抱歉我的英文。 我执行下一个代码: 在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; 我尝试使用垃圾收集器和自动缓存,但错误仍然存在。 我在下一个屏幕截图中看到了这个扩展:
答案 0 :(得分:2)
我认为当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
必须知道其视口的大小才能优化项呈现。