在 Windows 10 中,通用应用程序在桌面环境下是支持从资源管理器拖放文件打开的。

这篇博文将演示拖放图片或文本文件,并在程序中打开显示。

前台 XAML:

<Page x:Class="DropDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:DropDemo"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
AllowDrop="True"
DragOver="Grid_DragOver"
Drop="Grid_Drop">
<Image x:Name="img"
Visibility="Collapsed" />
<TextBlock x:Name="txt"
Visibility="Collapsed"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="30" />
</Grid>
</Page>

需要注意的是,能够接受拖放的控件的 Background 属性必须不能为 null,例如上面代码中,如果我们将 Grid 的 Background 属性去掉的话,则拖放就不起作用了。假如要实现一个拖放区域的话,那么我们可以将控件的 Background 属性设置为 Transparent,即为透明。这一点跟处理透明控件的点击事件是类似的。

后台代码:

DragOver 方法:

private void Grid_DragOver(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy; // 设置拖放时显示的文字。
e.DragUIOverride.Caption = "拖放打开"; // 是否显示拖放时的文字。默认为 true。
// e.DragUIOverride.IsCaptionVisible = false; // 是否显示文件预览内容,一般为文件图标。默认为 true。
// e.DragUIOverride.IsContentVisible = false; // Caption 前面的图标是否显示。默认为 true。
// e.DragUIOverride.IsGlyphVisible = false; e.DragUIOverride.SetContentFromBitmapImage(new BitmapImage(new Uri("ms-appx:///Assets/dropContent.jpg"))); e.Handled = true;
}

1、Caption 属性

如果没设置的话,则会根据 AcceptedOperation 的值来显示,例如 Copy 的话显示复制,Move 的话,显示移动。

2、IsGlyphVisible 属性

true:

false:

可以明确看见文本前面的图标是否显示。

3、SetContentFromBitmapImage 方法

这个方法可以传入一个图片,拖放的时候就可以显示图片了,例如我上面设置了一幅金馆长。如果没指定的话,则会显示文件的图标。

Drop 方法:

private async void Grid_Drop(object sender, DragEventArgs e)
{
var defer = e.GetDeferral(); try
{
DataPackageView dataView = e.DataView;
// 拖放类型为文件存储。
if (dataView.Contains(StandardDataFormats.StorageItems))
{
var files = await dataView.GetStorageItemsAsync();
var file = files.OfType<StorageFile>().First();
if (file.FileType == ".png" || file.FileType == ".jpg")
{
// 拖放的是图片文件。
BitmapImage bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenAsync(FileAccessMode.Read));
img.Source = bitmap; img.Visibility = Visibility.Visible;
txt.Visibility = Visibility.Collapsed;
}
else if (file.FileType == ".txt")
{
// 拖放的是文本文件。
string text = await FileIO.ReadTextAsync(file);
txt.Text = text; img.Visibility = Visibility.Collapsed;
txt.Visibility = Visibility.Visible;
}
}
}
finally
{
defer.Complete();
}
}

由于 DragEventArgs 对象有 GetDeferral 方法,并且我们使用到异步方法,所以要先获取 defer 对象,异步方法完成后再调用 defer 对象的 Complete 方法。这点跟后台任务是类似的。

效果:

Demo 下载:http://download.csdn.net/detail/h82258652/8838711

【Win10】文件拖放打开的更多相关文章

  1. C#中实现文件拖放打开的方法

    C#中实现文件拖放打开的方法 设置Form属性 AllowDrop = True; 在Form事件中 private void Form1_DragDrop(object sender, DragEv ...

  2. C#实现文件拖放并打开文件(使用ListBox)

    1.C#实现文件拖放并打开文件 (http://www.cnblogs.com/GaoHuhu/archive/2012/10/10/2717954.html)

  3. 如何在当前文件夹打开cmd(基于win10)

    如何在当前文件夹打开cmd(基于win10) 方法一: 1.先打开你要进入的文件夹 2.在标记的位置输入cmd,就可以进入当前文件的cmd 方法二: 1.打开你要进入的文件夹 2.通过shift + ...

  4. 删除win10系统下文件默认打开方式的关联-win10配置

    现象 文件默认打开方式错误 链接到老的打开软件 无法图形化重定义关联软件 文件图标关联异常 1. 打开注册表编辑器 win + R regedit 2. 修改注册表 找到以下注册表路径,找到指定的文件 ...

  5. win10 文件扩展名的更改

    win10 文件扩展名的改 随便打开一个文件夹,最好是"此电脑",  第二行是 "     文件  -   计算机  -  查看   " 在查看里面就可以更改了 ...

  6. Win10家庭版无法打开策略组问题

    Win10家庭版无法打开策略组问题 • 复制以下代码至记事本中 @echo off pushd "%~dp0" *.mum >List.txt *.mum >>L ...

  7. win10 家庭中文版打开本地组策略编辑器

      win10 家庭中文版打开本地组策略编辑器 CreateTime--2018年5月14日09:01:25 Author:Marydon 1.问题描述 2.问题解析 win10家庭版没有访问本地组策 ...

  8. Win10提示“无法打开此计算机上的组策略对象”如何解决

    为了更好地管理电脑,很多朋友都会去编辑Windows10的组策略.不过,有部分用户反馈自己在打开组策略的时候,遇到了“无法打开此计算机上的组策略对象”提示,无法打开组策略,这是怎么回事呢?下面,小编就 ...

  9. Android遍历获取Office格式(Word,Excel,PPT,PDF)的文件并打开

    此案例主要是模仿QQ加载WPS(Word,Excel,PPT)本地文件可打开查看,使用ListView加载,使用线程扫描SD卡下所有目录加载指定的Word,Excel,PPT等格式的文件,ListVi ...

随机推荐

  1. linux下的计算器

    (1)bc bc在默认的情况下是个交互式的指令.在bc工作环境下,可以使用以下计算符号:+ 加法 - 减法 * 乘法 / 除法 ^ 指数 % 余数如: 3+4;5*2;5^2;18/4      &l ...

  2. Windows10系统一键结束所有运行程序

    当电脑及其卡顿的时候,想打开任务管理器关掉所有运行的程序的时候,也会变得及其困难.因此之前你如果有犀利的小程序设置,这都不会是问题. 1)空白处右键-新建-快捷方式 2)将下列代码复制到下列框中(注意 ...

  3. 如何禁止浏览器自动填充非登陆input的账号和密码?

    发现浏览器填充密码的方式,那就是,找到页面上第一个type为password的input填充.发现了这个规律后,很自然的就想到了,是不是可以在真正的password前面加一个隐藏的password,形 ...

  4. 121. Best Time to Buy and Sell Stock (Array;DP)

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  5. python之生产者消费者模型

    #Auther Bob #--*--conding:utf-8 --*-- #生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个服务员我们就可以 ...

  6. swift - 画图 - 画矩形,虚线,圆和半圆

    import UIKit class JYJYBouncedCouponsViewCellBgView: UIView { //一定要在这里设置 背景色, 不要再draw里面设置, override ...

  7. phpcms与discuz的ucenter整合

    1.安装phpcms系统,域名为pc.me   2.安装discuz,并选择安上uc_server,域名为dz.me   3.在phpcms下phpsso的系统设置   4.到ucenter管理中心- ...

  8. linux,windows 可执行文件(ELF、PE)

    现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format ...

  9. 数据库日志文件——数据库“xxx”的事务日志已满,原因为“LOG_BACKUP”

    治标的方案: 参考网址:http://blog.csdn.net/tianlianchao1982/article/details/7388616 http://bbs.51cto.com/threa ...

  10. sublime Text与python3的中文编码错误解决办法

    在 linux服务器上运行代码报错: Python3中遇到UnicodeEncodeError: ‘ascii’ codec can’t encode characters in ordinal no ...