在UWP异步绑定缩略图图像

本文关键字:略图 图像 绑定 UWP 异步 | 更新日期: 2023-09-27 18:14:50

我正在开发内部文件管理器在我的UWP应用程序。我在GridView中显示StorageFolder的内容调用这个方法:

gridView.ItemsSource = await storageFolder.GetItemsAsync();

另外,我有一个项目模板,用于可视化链接到GridView的文件/文件夹项目外观。这个模板中有一个Image对象。我想绑定StorageFolder的缩略图图像到这个图像对象的Source属性。然而,GetThumbnailAsync()是一个异步方法,而不是一个属性。我该怎么做呢?

在UWP异步绑定缩略图图像

另外,我有一个项目模板,用于可视化链接到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" />