这是我的列表框:当我添加多个项目到ListBox时,我得到OutOfMemoryException。如何修改它?
XMLA:
<Style x:Key="ListBoxStyle" TargetType="ListBox">
<Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<ScrollViewer x:Name="ScrollViewer">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{TemplateBinding Height}"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<ItemsPresenter Grid.Row="0"/>
<Button Content="Add" Grid.Row="1" Click="Button_Click"/>
</Grid>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style> <ListBox Style="{StaticResource ListBoxStyle}" Name="listBox" Height="600" ItemsSource="{Binding MyData}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<Image Source="{Binding Img}" Stretch="UniformToFill"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
代码隐藏:
private void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 50; i++)
{
MyData.Add(new Data { Name = i.ToString(), Img = "/Background.png" });
}
}
当我点击按钮的更多,我得到一个OutOfMemoryException异常。
但是,如果我没有设置ListBox风格。我将项目添加到列表框中,该项目是工作。
哦。我的列表框必须有图像。你能告诉我如何重新模板我的列表框,而不会丢失数据虚拟化? – BillyMadisonnn 2012-02-22 11:32:01
你可以这样做的方法之一:删除“更多”'按钮'并检测底部压缩状态以加载下一个项目 – Ku6opr 2012-02-22 11:35:14
我找到了一个解决方案用户Scrollviewer和itemsControl组成一个ListBox – BillyMadisonnn 2012-02-22 11:49:04