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

时间:2016-09-15 10:53:40

标签: c# xaml uwp

我正在使用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> 
代码背后的代码:

     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++)
            {

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

                });
            }
            AdaptiveGV.ItemsSource = ImageCollection;
        }
    }

Images类

public class Images
    {
        public string ImageURL { get; set; }
        public string ImageText { get; set; }
    }

我只能通过将imageURL字符串值设置为图像的值或URL来显示来自Web的图像和Assets文件夹中的图像,但是有没有办法让我可以显示图像从本地文件夹?

2 个答案:

答案 0 :(得分:0)

根据Image.Source财产的文件:

  

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

只有文档How to load file resources (XAML)中描述的资源才能使用uri进行加载。代码中的图像路径无法直接设置为XAML中if (!string.IsNullOrEmpty(model.search)) { Your code here } 控件的源。

因此,我们需要阅读文件流并将ImageSource对象设置为BitmapImageWriteableBitmap到图像控件。

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

Image

答案 1 :(得分:-1)

如果要从本地目录获取文件,请使用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
    }
}

这将遍历文件,并查找与您正在寻找的文件扩展名列表相匹配的任何内容,并随身携带。

这只是示例代码,但可以从本地目录中获取所需内容。