如何制作一个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