Мой ItemTemplate очень прост, Один TextBlock
, чтобы показать Имя , Другой Image
, чтобы показать Чистое изображение :
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image VerticalAlignment="Center" Source="{Binding Url, Mode=OneWay, Converter={StaticResource cvtImage}}" Width="30" Height="30"/>
<TextBlock Grid.Column="1" Text="{Binding Name, Mode=OneWay}" Margin="5" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
Вот моймассив изображений:
private int[] numArr =
{
20333581,
65476272,
65494751,
67810732,
72685857,
73794129,
74292128,
78448608,
89297529,
109457648,
128775798,
136864278,
140889893,
155315730,
155707244,
158590544,
160382605,
162265810,
167648987,
170883246,
175708510,
181177782,
};
private List<ImageItem> imagesList = new List<ImageItem>();
private int imageCount = 22;
private void initialImageList()
{
for (int i = 0; i < imageCount; i++)
{
imagesList.Add(new ImageItem {
Name = "item " + (i + 1).ToString(),
Url = String.Format("https://p.qlogo.cn/gh/{0}/{0}_1/40", numArr[i], numArr[i])
});
}
}
Чистые изображения, указанные выше, действительны. Класс ImageItem
прост с двумя свойствами: Name
и Url
Вот мой конвертер class:
class GcToNetImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var url = (string)value;
Console.WriteLine("url is " + url);
try
{
return new BitmapImage(new Uri(url));
}
catch (Exception ex)
{
Console.WriteLine("ex message: {0}", ex.Message);
return new BitmapImage();
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Настройка Aftet lb.ItemsSource = this.imagesList;
, когда вы скользите вниз по ListBox, вы определенно получите IOException
.
Я думаю, это что-то из-за утечки памяти