背水一战 Windows 10 (94) - 选取器: 自定义文件打开选取器
作者:webabcd
介绍
背水一战 Windows 10 之 选取器
- 自定义文件打开选取器
示例
1、演示如何开发自定义文件打开选取器
App.xaml.cs
// 通过文件打开选取器激活应用程序时所调用的方法
protected override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args)
{
var rootFrame = new Frame();
rootFrame.Navigate(typeof(Windows10.Picker.MyOpenPicker), args);
Window.Current.Content = rootFrame; Window.Current.Activate();
}
Picker/MyOpenPicker.xaml
<Page
x:Class="Windows10.Picker.MyOpenPicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Picker"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnPickLocalFile" Content="选择一个本地文件" Click="btnPickLocalFile_Click" Margin="5" /> <Button Name="btnPickRemoteFile" Content="选择一个远程文件" Click="btnPickRemoteFile_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Picker/MyOpenPicker.xaml.cs
/*
* 演示如何开发自定义文件打开选取器
*
* 1、在 Package.appxmanifest 中新增一个“文件打开选取器”声明,并做相关配置
* 2、在 App.xaml.cs 中 override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args),如果 app 是由文件打开选取器激活的,则会调用此方法
*
* FileOpenPickerActivatedEventArgs - 通过“文件打开选取器”激活应用程序时的事件参数
* FileOpenPickerUI - 获取 FileOpenPickerUI 对象
* Kind - 此 app 被激活的类型(ActivationKind 枚举)
* 比如,如果是通过“文件打开选取器”激活的话,则此值为 FileOpenPicker
* PreviousExecutionState - 此 app 被激活前的状态(ApplicationExecutionState 枚举)
* 比如,如果此 app 被激活前就是运行状态的或,则此值为 Running
* SplashScreen - 获取此 app 的 SplashScreen 对象
* CallerPackageFamilyName - 获取激活了此 app 的应用的包名(但是实际测试发现,获取到的却是此 app 的包名)
* User - 获取激活了此 app 的 User 对象
*
* FileOpenPickerUI - 自定义文件打开选取器的帮助类
* AllowedFileTypes - 允许的文件类型,只读
* SelectionMode - 选择模式(FileSelectionMode.Single 或 FileSelectionMode.Multiple)
* Title - 将在“自定义文件打开选取器”上显示的标题
* CanAddFile(IStorageFile file) - 是否可以将指定的文件添加进选中文件列表
* AddFile(string id, IStorageFile file) - 将文件添加进选中文件列表,并指定 id
* ContainsFile(string id) - 选中文件列表中是否包含指定的 id
* RemoveFile(string id) - 根据 id 从选中文件列表中删除对应的文件
* Closing - 用户关闭“自定义文件打开选取器”时触发的事件
*
*
* 注意:测试时发现如果此 app 作为文件打开选取器激活之前是运行状态的话,则在作为文件打开选取器时会出现控件事件无法触发的情况(但是有的时候是正常的),不知道为什么,这一点开发和测试时要注意
*/ using System;
using System.Collections.Generic;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Storage;
using Windows.Storage.Pickers.Provider;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace Windows10.Picker
{
public sealed partial class MyOpenPicker : Page
{
private FileOpenPickerUI _fileOpenPickerUI; public MyOpenPicker()
{
this.InitializeComponent();
} protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 获取 FileOpenPickerUI 对象(从 App.xaml.cs 传来的)
FileOpenPickerActivatedEventArgs args = (FileOpenPickerActivatedEventArgs)e.Parameter;
_fileOpenPickerUI = args.FileOpenPickerUI; _fileOpenPickerUI.Title = "自定义文件打开选取器"; // 注意:选择的文件的扩展名必须匹配 AllowedFileTypes 中的定义(其是在调用端的 FileOpenPicker.FileTypeFilter 中配置的)
IReadOnlyList<string> allowedFileTypes = _fileOpenPickerUI.AllowedFileTypes;
lblMsg.Text = "allowedFileTypes: " + string.Join(",", allowedFileTypes);
lblMsg.Text += Environment.NewLine; lblMsg.Text += "Kind: " + args.Kind;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "SplashScreen.ImageLocation: " + args.SplashScreen.ImageLocation;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "PreviousExecutionState: " + args.PreviousExecutionState;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "CallerPackageFamilyName: " + args.CallerPackageFamilyName;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "User.NonRoamableId: " + args.User.NonRoamableId;
lblMsg.Text += Environment.NewLine; // _fileOpenPickerUI.Closing += _fileOpenPickerUI_Closing; base.OnNavigatedTo(e);
} protected override void OnNavigatedFrom(NavigationEventArgs e)
{
// _fileOpenPickerUI.Closing -= _fileOpenPickerUI_Closing; base.OnNavigatedFrom(e);
} // 选择一个本地文件
private async void btnPickLocalFile_Click(object sender, RoutedEventArgs e)
{
StorageFile file = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\hololens.jpg");
if (_fileOpenPickerUI.CanAddFile(file))
{
AddFileResult result = _fileOpenPickerUI.AddFile("myFile", file); lblMsg.Text = "选择的文件: " + file.Name;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "AddFileResult: " + result.ToString();
}
} // 选择一个远程文件
private async void btnPickRemoteFile_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri("http://images.cnblogs.com/mvpteam.gif", UriKind.Absolute); // 扩展名必须匹配 FileOpenPicker.FileTypeFilter 中的定义
StorageFile file = await StorageFile.CreateStreamedFileFromUriAsync("mvp.gif", uri, RandomAccessStreamReference.CreateFromUri(uri));
if (_fileOpenPickerUI.CanAddFile(file))
{
AddFileResult result = _fileOpenPickerUI.AddFile("myFile", file); lblMsg.Text = "选择的文件: " + file.Name;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "AddFileResult: " + result.ToString();
}
}
}
}
2、演示如何调用自定义文件打开选取器
Picker/MyOpenPickerDemo.xaml
<Page
x:Class="Windows10.Picker.MyOpenPickerDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Picker"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" TextWrapping="Wrap" Margin="5">
<Run>
如果需要激活自定义的文件选取窗口,请在弹出的选取器窗口的左侧的导航列表中选择相应的 app
</Run>
<LineBreak />
<Run>
测试时发现如果此 app 作为文件打开选取器激活之前是运行状态的话,则在作为文件打开选取器时会出现控件事件无法触发的情况(但是有的时候是正常的),不知道为什么,这一点开发和测试时要注意
</Run>
</TextBlock> <Button Name="btnMyOpenPicker" Content="弹出文件选择窗口" Click="btnMyOpenPicker_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Picker/MyOpenPickerDemo.xaml.cs
/*
* 演示如何调用自定义文件打开选取器
*
* 自定义文件打开选取器参见 MyOpenPicker.xaml
*/ using System;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.Picker
{
public sealed partial class MyOpenPickerDemo : Page
{
public MyOpenPickerDemo()
{
this.InitializeComponent();
} private async void btnMyOpenPicker_Click(object sender, RoutedEventArgs e)
{
// 选择一个文件
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.CommitButtonText = "选中此文件";
openPicker.FileTypeFilter.Add("*"); // 弹出文件选择窗口
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
lblMsg.Text = "选中文件: " + file.Name;
}
else
{
lblMsg.Text = "取消了";
}
}
}
}
OK
[源码下载]
背水一战 Windows 10 (94) - 选取器: 自定义文件打开选取器的更多相关文章
- 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器
[源码下载] 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器 作者:webabcd 介绍背水一战 Windows 10 之 选取器 自定义文件保存选取器 示例1.演示如何 ...
- 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri
[源码下载] 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 ...
- 背水一战 Windows 10 (97) - 选取器: CachedFileUpdater
[源码下载] 背水一战 Windows 10 (97) - 选取器: CachedFileUpdater 作者:webabcd 介绍背水一战 Windows 10 之 选取器 CachedFileUp ...
- 重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口
原文:重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口 [源码下载] 重新想象 Windows 8 Store Apps (26) ...
- 背水一战 Windows 10 (93) - 选取器: FileOpenPicker, FolderPicker, FileSavePicker
[源码下载] 背水一战 Windows 10 (93) - 选取器: FileOpenPicker, FolderPicker, FileSavePicker 作者:webabcd 介绍背水一战 Wi ...
- 背水一战 Windows 10 (96) - 选取器: ContactPicker
[源码下载] 背水一战 Windows 10 (96) - 选取器: ContactPicker 作者:webabcd 介绍背水一战 Windows 10 之 选取器 ContactPicker(联系 ...
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- 背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议
[源码下载] 背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 关联指定的文件类型 ...
- 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换
[源码下载] 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换 作者:webabcd 介 ...
随机推荐
- IIS7/8下提示 HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求
IIS7的设置和IIS6有很多不同之处,这里提到的的是一个上传附件大小设置的问题. HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web ...
- Django 的认识,面试题
Django 的认识,面试题 1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全 ...
- HihoCoder - 1103 Colorful Lecture Note
Little Hi is writing an algorithm lecture note for Little Ho. To make the note more comprehensible, ...
- [转]JSOUP 抓取HTTPS/HTTP网页,校验问题
针对一般的http请求是不需要的校验的.但是https安全校验过总过不去.最后找到以下方法,终于成功. 让我们的站点信任所有站点,不需要引包,系统自带ssl证书校验,话不多数,贴代码. /** * 信 ...
- 文件操作命令(replace)
Replace 命令: // 描述: 替换文件. // 语法: REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W ...
- Navicat Premium 修改MySQL密码(忘记密码的情况下)
Navicat Premium 修改MySQL密码 1,首先,Navicat Premium还能够连接MySQL. 2,选择数据库,右键单击,选择“命令行模式...”,下图示例 3,打开命令行模式, ...
- SRILM的使用及平滑方法说明
1.简介 SRILM是通过统计方法构建语言模型,主要应用于语音识别,文本标注和切分,以及机器翻译等. SRILM支持语言模型的训练和评测,通过训练数据得到语言模型,其中包括最大似然估计及相应的平滑算法 ...
- oracle 关于房贷计算过程
create or replace procedure fd(p_bj in number, --贷款本金 p_nll in number, --年利率 p_ns in number, --贷款年数 ...
- 【机器学习】主成分分析法 PCA (I)
主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...
- ORB-SLAM2阅读笔记(一)从mono_eourc.cpp出发理解ORB-SLAM2
泡泡机器人上已经有公开课ORB-SLAM2的代码详解了,我也先看了一个多小时的视频,后来发现看完还是迷迷糊糊,自己没看源码,根本不明白讲的什么,因此,打开文件开始阅读源码. 为了阅读逻辑清楚,我从OR ...