C# 使用自适应栅格视图显示本地文件夹中的图像

C# 使用自适应栅格视图显示本地文件夹中的图像,c#,xaml,uwp,C#,Xaml,Uwp,我正在使用Microsoft.Toolkit库,我想知道是否有办法使用自适应网格视图显示本地文件夹中的图像。 这是我的密码: <Page.Resources> <DataTemplate x:Key="Photos"> <Grid> <Image Source="{Binding ImageURL}" Stretch="Unifo

我正在使用Microsoft.Toolkit库,我想知道是否有办法使用自适应网格视图显示本地文件夹中的图像。 这是我的密码:

<Page.Resources>
        <DataTemplate x:Key="Photos">
            <Grid>
                <Image Source="{Binding ImageURL}"
                           Stretch="UniformToFill"
                           HorizontalAlignment="Center"
                           VerticalAlignment="Center">
                </Image>
                <TextBlock Foreground="Black" FontWeight="Thin" Text="{Binding ImageText}"
                           FontSize="20">
                </TextBlock>
            </Grid>
        </DataTemplate>
    </Page.Resources>

<Grid>
            <UWPToolkit:AdaptiveGridView x:Name="AdaptiveGV" ItemHeight="200"  DesiredWidth="200" ItemTemplate="{StaticResource Photos}"/>
            <Button Content="pick folder" Click="Button_Click" Margin="20,4,0,604"/>
        </Grid> 

我只能通过将imageURL字符串值设置为图像的值或URL,才能从web上获取图像和要显示的资产文件夹中的图像,但是有没有办法从本地文件夹中获取要显示的图像

如果要从本地目录获取文件,请使用DirectoryInfo并执行类似操作

var di = new DirectoryInfo("c:\\temp");
var listOfFileExtention = new List<string>();
foreach (var f in di.GetFiles("*.*", SearchOption.AllDirectories))
{

    if (listOfFileExtention.Any(x => x == f.Extension))
    {
        // your code here
    }
}
var di=newdirectoryinfo(“c:\\temp”);
var listOfFileExtention=new List();
foreach(di.GetFiles(“*.*”,SearchOption.AllDirectories)中的var f)
{
if(listOfFileExtention.Any(x=>x==f.Extension))
{
//你的代码在这里
}
}
这将在文件中循环,查找与您正在查找的文件扩展名列表相匹配的任何文件,并对它们执行任何需要的操作


这只是示例代码,但将从本地目录获取所需的内容

根据财产文件:

应用程序中图像元素的典型用途是显示用户图片库中的图片。可以通过编程方式或通过FileOpenPicker访问这些图片。在任何一种情况下,您获得的StorageFile对象都可以作为流打开,但不提供图像文件的URI引用。

只有文档中描述的资源才能使用uri进行加载。代码中的图像路径不能直接设置为XAML中
image
控件的源

因此,我们需要读取文件流,并为图像控件设置一个类似或的对象

我按如下方式更新了您的代码,现在可以使用了:

   List<Images> ImageCollection;
    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        ImageCollection = new List<Images>();
        // pick a folder
        var folderPicker = new Windows.Storage.Pickers.FolderPicker();
        folderPicker.FileTypeFilter.Add(".jpg");
        var folder = await folderPicker.PickSingleFolderAsync();
        var filesList = await folder.CreateFileQueryWithOptions(new QueryOptions(CommonFileQuery.DefaultQuery, new string[] { ".jpg", ".png", ".jpeg" })).GetFilesAsync();
        for (int i = 0; i < filesList.Count; i++)
        {
            StorageFile imagefile = filesList[i];
            BitmapImage bitmapimage = new BitmapImage();
            using (IRandomAccessStream stream = await imagefile.OpenAsync(FileAccessMode.Read))
            {
                bitmapimage.SetSource(stream);
            }

            ImageCollection.Add(new Images()
            {
                ImageURL = bitmapimage,
                ImageText = filesList[i].Name

            });
        }
        AdaptiveGV.ItemsSource = ImageCollection;
    }
}
public class Images
{
    public ImageSource ImageURL { get; set; }
    public string ImageText { get; set; }
}
列表图像采集;
专用异步无效按钮\u单击(对象发送方,路由目标)
{
ImageCollection=新列表();
//选择一个文件夹
var folderPicker=new Windows.Storage.Pickers.folderPicker();
folderPicker.FileTypeFilter.Add(“.jpg”);
var folder=await folderPicker.PickSingleFolderAsync();
var filesList=wait folder.CreateFileQueryWithOptions(新的查询选项(CommonFileQuery.DefaultQuery,新字符串[]{.jpg“,.png“,.jpeg”})).GetFileAsync();
for(int i=0;i
您的代码确实有效,但它执行了它应该执行的操作,即从文件夹中获取文件列表。然而,我所坚持的是这个自适应栅格视图,我不能用自适应栅格视图来显示图像
var di = new DirectoryInfo("c:\\temp");
var listOfFileExtention = new List<string>();
foreach (var f in di.GetFiles("*.*", SearchOption.AllDirectories))
{

    if (listOfFileExtention.Any(x => x == f.Extension))
    {
        // your code here
    }
}
   List<Images> ImageCollection;
    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        ImageCollection = new List<Images>();
        // pick a folder
        var folderPicker = new Windows.Storage.Pickers.FolderPicker();
        folderPicker.FileTypeFilter.Add(".jpg");
        var folder = await folderPicker.PickSingleFolderAsync();
        var filesList = await folder.CreateFileQueryWithOptions(new QueryOptions(CommonFileQuery.DefaultQuery, new string[] { ".jpg", ".png", ".jpeg" })).GetFilesAsync();
        for (int i = 0; i < filesList.Count; i++)
        {
            StorageFile imagefile = filesList[i];
            BitmapImage bitmapimage = new BitmapImage();
            using (IRandomAccessStream stream = await imagefile.OpenAsync(FileAccessMode.Read))
            {
                bitmapimage.SetSource(stream);
            }

            ImageCollection.Add(new Images()
            {
                ImageURL = bitmapimage,
                ImageText = filesList[i].Name

            });
        }
        AdaptiveGV.ItemsSource = ImageCollection;
    }
}
public class Images
{
    public ImageSource ImageURL { get; set; }
    public string ImageText { get; set; }
}