【发布时间】:2014-03-13 13:13:36
【问题描述】:
我正在尝试创建一个包含图像及其一些详细信息的列表框。 代码如下:
<ListBox x:Name="GalleryImages" ItemsSource="{Binding}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel VirtualizingStackPanel.VirtualizationMode="Recycling" Orientation="Vertical" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Top">
<Image Source="{Binding Path=ImageSrc}" Height="200" Width="480" Stretch="Fill"/>
<Border BorderThickness="5" BorderBrush="White" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="10" >
<StackPanel HorizontalAlignment="Center" Background="White" Opacity="0.6">
<TextBlock Text="{Binding Path=Time}" Foreground="Black" HorizontalAlignment="Center" Padding="10,5,10,0" FontSize="12" />
<TextBlock Text="{Binding Path=Day}" Foreground="Black" HorizontalAlignment="Center" FontSize="45" FontWeight="Bold" Padding="10,0,10,10" Margin="0,-10,0,-18"/>
<TextBlock Text="{Binding Path=MonthAndYear}" Foreground="Black" HorizontalAlignment="Center" FontSize="17" Padding="10,0,10,5"/>
</StackPanel>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
支持的代码是:
public class Item
{
public ImageSource ImageSrc { get; set; }
public string Time { get; set; }
public string Day { get; set; }
public string MonthAndYear { get; set; }
}
//Creating a New Item
//Added the time,day, monthandyear
//Now adding the image source
//This will be looped each time for each image
Item item = new Item();
using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
{
if (ISF.DirectoryExists("SomeDirectory"))
using (IsolatedStorageFileStream FS = ISF.OpenFile("SomeDirectory/" + "SOMERANDOMIMAGENAME", FileMode.Open, FileAccess.Read))
{
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(FS);
item.ImageSrc = bitmap;
}
}
最后将项目一一绑定到之前创建的列表框:
Dispatcher.BeginInvoke(() => GalleryImages.Items.Add(item));
现在的问题是: 如您所见,所有列表框图像都使用新的位图图像从独立存储中获取,然后将其设置为 item.ImageSrc。但是当项目超过 25 时,它会产生内存泄漏,并且应用程序在 显示图像
后崩溃到目前为止我尝试了什么,
- 添加了 virtualizingstackpanel,它可以工作,但不适用于超过 25 个的图像。
- 在将项目添加到 GalleryImage(ListBox) 项目后立即设置 item.ImageSrc = null,但这会使 ListBox 的图像也为 null。
对于超过 1000 张的图像,我还能做些什么来解决这个问题??
【问题讨论】:
标签: c# windows-phone msdn