原文:2018-8-10-win10-uwp-关联文件

title author date CreateTime categories
win10 uwp 关联文件
lindexi
2018-08-10 19:17:19 +0800
2018-2-13 17:23:3 +0800
Win10 UWP

有时候应用需要打开后缀名为x的文件,那么如何从文件打开应用?

首先,需要打开 Package.appxmanifest 在声明添加文件

添加一个功能,需要写的最少的项是名称,文件类型两个。

上面的图就是我添加 jpg 关联的方法,建议是写多一些。如果是作为测试,想看这个功能是如何使用,就只需要写文件类型。

现在我的应用可以打开 jpg 文件,在一个 jpg 文件右击打开方式,在这个项目部署之后就可以设置是使用这个项目打开。在实际的项目我也有一个应用是需要这个功能,这个就是 UWP图床: https://www.microsoft.com/store/apps/9nblggh562r2 这个软件可以快速将图片上传到图床,图床可以使用默认的也可以自己设置。在写博客时使用这个软件可以快速上传图片创建连接。

添加完,打开 App.xaml.cs 添加一个函数,通过 OnFileActivated 调用就是用户使用这个应用打开关联文件,打开的文件可以从 FileActivatedEventArgs 找到

        protected override void OnFileActivated(FileActivatedEventArgs args)
{
base.OnFileActivated(args);
}

这个函数现在还没代码,需要对他做一点修改

        protected override void OnFileActivated(FileActivatedEventArgs args)
{
var file = args.Files[0];
Frame frame = Window.Current.Content as Frame;
if (frame == null)
{
frame = new Frame();
Window.Current.Content = frame;
}
frame.Navigate(typeof(MainPage), file);
Window.Current.Activate();
}

这里的 file 可能是空,但是上面只是告诉大家一个最简单方法,不考虑可能存在的软件已经打开等。

如果已经打开了软件,通过 frame.Navigate 重新跳转到主页面,页面跳转就是这样,页面传入可以是 StorageFile 但是需要在对应的页面使用对应类型。

现在软件在用户打开对应文件直接显示在 MainPage ,如果需要显示在别的窗口,就可以通过frame.Navigate跳转到其他的页面,对于跳转传参数,建议使用本渣的 MVVM 框架,请看win10 uwp MVVM入门

我没有在博客说如何传参,但是这个对大家也不难。

打开 MainPage.xaml 写一个 Image 在这个 Image 显示打开的图片

            <Image x:Name="Image"></Image>

打开 xaml.cs ,把app启动的file显示在刚才的图片

        protected override async void OnNavigatedTo(NavigationEventArgs e)
{
var file = e.Parameter as StorageFile;
if (file != null)
{
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
BitmapImage img = new BitmapImage();
await img.SetSourceAsync(stream);
Image.Source = img;
}
}
}

UWP 从文件显示图片很简单,打开放在img就好。

现在尝试运行一下这个项目,然后找到一张 jpg 图片,右击打开方式选择这个项目,这时就可以看到 UWP 应用显示图片。可以看到关联的代码很简单,实际上也是很简单

刚才只是用最简单的方式写了显示的名称,但是一个好看的应用,需要在关联文件加上图片。

加上图片就是在刚才打开的功能可以看到图标,选择一个好看的图片,在用户将打开这个文件的默认应用设置为自己的应用时,就会使用这个应用设置的图标

最新文章

  1. 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但
  2. 《DSP using MATLAB》示例Example5.12
  3. SqlServer2012 数据库的同步之发布+订阅
  4. nginx http跳转到https
  5. LA 3905 Meteor
  6. mysql管理员操作
  7. 每日一“酷”之bisect
  8. AutoCAD图形打印出图片 C#
  9. 使用数组实现队列----《数据结构与算法分析---C语言描述》
  10. Pods was rejected as an implicit dependency for &amp;#39;libPods.a&amp;#39; because its architectures &amp;#39;x86_64&amp;#39; didn
  11. emeditor只显示特定类型的文件
  12. Mysql主从配置讲解
  13. centOS 安装gitlab-runner
  14. kubernetes k8s yum localinstall
  15. JDK(二)JDK1.8源码分析【排序】timsort
  16. 20155117 王震宇 2006-2007-2 《Java程序设计》第四周学习总结
  17. AutoMapper差异内容备份
  18. 【BZOJ4817】【SDOI2017】树点涂色 [LCT][线段树]
  19. KEIL、uVision、RealView、MDK、KEIL C51之间比较
  20. ES6 async await

热门文章

  1. Java之ssh框架spring配置文件配置定时任务
  2. C语言和其他语言的区别
  3. mybatis无效比较:invalid comparison:java.util.data and java.lang.string
  4. 以太坊智能合约开发 Solidity学习
  5. springaop\ cglib\ AspectJ
  6. C# 判断点是否在矩形框内
  7. 微信小程序跳转传参参数丢失?
  8. html+css面试题(一)
  9. 11gr2 alert日志中报TNS-12535 TNS-00505原因及解决方法
  10. Oracle 11gR2 RAC网络配置,更改public ip、vip和scanip