我正在尝试在列表视图中加载远程图像,但只有最后一张图像显示在列表中,其余图像不显示。这是代码,我已经删除了顶部代码的一些部分。请注意,代码编译正常,只是远程图像不加载(UI中的最后一个除外)。任何帮助都会很酷!
public async void button_Click(object sender, RoutedEventArgs e)
{
if (youtube_ids.Count > 0)
{
DownloadLinks.Visibility = Visibility.Visible;
foreach (var youtube_id in youtube_ids)
{
var grid = new Grid();
grid.Width = 400;
grid.Height = 50;
// image thumbnail
var thumb = new Image();
thumb.Width = 50;
thumb.MaxHeight = 50;
thumb.Margin = new System.Windows.Thickness { Left = 10 };
var thumb_file = new BitmapImage(new Uri($"http://img.youtube.com/vi/{youtube_id}/0.jpg", UriKind.Absolute));
thumb.VerticalAlignment = System.Windows.VerticalAlignment.Center;
thumb.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
thumb_file.DownloadCompleted += (ob, ev) =>
{
thumb.Source = thumb_file;
};
grid.Children.Add(thumb);
DownloadLinks.Items.Add(grid);
}
}
}
答案 0 :(得分:1)
原因是您没有根据上面的代码循环下载缩略图。此外,在下载完成中,尝试使用事件变量而不是依赖于事件外部的变量,因为如果重新分配也会导致问题。
将循环中的下载和网格移到其外部。
答案 1 :(得分:1)
不要在代码后面创建UI元素,而是声明一个合适的ItemTemplate
<ListView x:Name="images">
<ListView.ItemTemplate>
<DataTemplate>
<Image Width="50" MaxHeight="50" Margin="10" Source="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
并将一组图像URL字符串分配给ItemsSource属性:
images.ItemsSource = youtube_ids.Select(
i => string.Format("http://img.youtube.com/vi/{0}/0.jpg", i));
答案 2 :(得分:0)
问题是看起来你有一个名为&#34; grid&#34;这超出了这种方法的范围。正如上面提到的netniV,你不应该出于这个原因。
您只需重新添加之前已添加的相同网格。
您的代码应如下所示:
public async void button_Click(object sender, RoutedEventArgs e)
{
if (youtube_ids.Count > 0)
{
DownloadLinks.Visibility = Visibility.Visible;
foreach (var youtube_id in youtube_ids)
{
var grid = new Grid();
grid.Width = 400;
grid.Height = 50;
// image thumbnail
var thumb = new Image();
thumb.Width = 50;
thumb.MaxHeight = 50;
thumb.Margin = new System.Windows.Thickness { Left = 10 };
var thumb_file = new BitmapImage(new Uri($"http://img.youtube.com/vi/{youtube_id}/0.jpg", UriKind.Absolute));
thumb.VerticalAlignment = System.Windows.VerticalAlignment.Center;
thumb.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
thumb_file.DownloadCompleted += (ob, ev) =>
{
thumb.Source = thumb_file;
};
grid.Children.Add(thumb);
DownloadLinks.Items.Add(grid);
**}**
}
}