Condividi tramite


如何制作一个Photo应用

在Windows 8.0版本的时代,很多人会问,系统自带的Photo是不是有特权?比如说在打开一张图片的同时,可以有权限访问整个文件夹,而我们自己写的程序没有办法实现这个功能。

在Windows 8.1 版本,我们可以通过自己的代码来实现这个功能了。

您需要一个新的API,在Windows 8.1中,从文件启动的选项中新增了一个API叫做:NeighboringFilesQuery property,通过这个方式可以获得同文件夹下所有的文件。

注意:您需要开启Appmanifest里面Capabilities中的Picture Library以获得对图片库的支持。

举个例子,您可以做一个媒体播放器,比如说播放不同的音乐文件,当然这个得看您应用的需求。

这里我做了一个简单的浏览图片的Demo供大家参考,通过右键选择使用我们的应用打开图片:

第一张图:

第二张图片:

 

相关的代码如下:

App.xaml.cs中定义一个以文件访问的入口

 protected override void OnFileActivated(FileActivatedEventArgs e)
 {
 Frame rootFrame = Window.Current.Content as Frame;
 if (rootFrame == null)
 {
 rootFrame = new Frame();
 Window.Current.Content = rootFrame;
 }
 
 if (rootFrame.Content == null)
 {
 if (!rootFrame.Navigate(typeof(MainPage)))
 {
 throw new Exception("Failed to create initial page");
 }
 }
 
 var page = rootFrame.Content as MainPage;
 if (page != null)
 {
 page.FileEvent = e;
 }
 
 // Ensure the current window is active
 Window.Current.Activate();
 }
 

在MainPage.xaml.cs中的页面加载完成(Loaded)事件中做一些处理

 public async void Page_Loaded(object sender, RoutedEventArgs e)
 {
 try
 {
 var fileList = await _fileEventArgs.NeighboringFilesQuery.GetFilesAsync();
 foreach (StorageFile file in fileList)
 {
 IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read);
 BitmapImage bitmapImage = new BitmapImage();
 bitmapImage.SetSource(fileStream);
 Image displayImage = new Image();
 displayImage.Source = bitmapImage;
 imagegallery.Items.Add(displayImage);
 }
 }
 catch (Exception k)
 {
 txt.Text = "需要通过右键图片选择以ImageGallery打开的方式来运行程序。";
 }
 }
 

我把代码上传到了Skydrive中,大家可以下载参考一下:https://1drv.ms/1nuFiDs