在UWP异步绑定缩略图图像
本文关键字:略图 图像 绑定 UWP 异步 | 更新日期: 2023-09-27 18:14:50
我正在开发内部文件管理器在我的UWP应用程序。我在GridView中显示StorageFolder的内容调用这个方法:
gridView.ItemsSource = await storageFolder.GetItemsAsync();
另外,我有一个项目模板,用于可视化链接到GridView的文件/文件夹项目外观。这个模板中有一个Image对象。我想绑定StorageFolder的缩略图图像到这个图像对象的Source
属性。然而,GetThumbnailAsync()
是一个异步方法,而不是一个属性。我该怎么做呢?
另外,我有一个项目模板,用于可视化链接到GridView的文件/文件夹项目外观。这个模板中有一个Image对象。我想把storage_folder的缩略图绑定到image对象的Source属性。
我认为你可以首先获得缩略图,然后将其转换为图像,所以它可以是Image
控制的来源。我认为你需要的是这样的:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<local:ThumbnailToImageConverter x:Key="cvt" />
</Grid.Resources>
<GridView x:Name="gridView">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Thumbnail, Converter={StaticResource cvt}}" Stretch="None" />
<TextBlock Text="{Binding Name}" Margin="0,5" />
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
绑定模型背后的代码和类:
private ObservableCollection<Model> Collection = new ObservableCollection<Model>();
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
var files = await KnownFolders.PicturesLibrary.GetFilesAsync();
foreach (var file in files)
{
var thumbnail = await file.GetThumbnailAsync(ThumbnailMode.PicturesView, 100);
Collection.Add(new Model { Name = file.Name, Thumbnail = thumbnail });
}
gridView.ItemsSource = Collection;
}
public class Model
{
public StorageItemThumbnail Thumbnail { get; set; }
public string Name { get; set; }
}
ThumbnailToImageConverter
代码:
public class ThumbnailToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
BitmapImage image = null;
if (value != null)
{
StorageItemThumbnail thumbnail = (StorageItemThumbnail)value;
image = new BitmapImage();
image.SetSource(thumbnail);
}
return (image);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
由于我在代码中使用了PicturesLibrary
,所以当您测试此代码时,我们需要在清单文件中启用<uap:Capability Name="picturesLibrary" />
。