1.本文開始前
ファイルをアップロードする場合、一般的にはアップロードボタンを1つ提供し、アップロードをクリックしてファイル(またはディレクトリ選択ダイアログ)をポップアップし、ファイル(またはディレクトリ)を選択した後、ダイアログボックスオブジェクトからファイルパスを取得した後、アップロード操作を行う。
ダイアログボックスファイルの選択

選択ダイアログボックスのコードは次のとおりです。
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择Exe文件";
openFileDialog.Filter = "exe文件|*.exe";
openFileDialog.FileName = string.Empty;
openFileDialog.FilterIndex = 1;
openFileDialog.Multiselect = false;
openFileDialog.RestoreDirectory = true;
openFileDialog.DefaultExt = "exe";
if (openFileDialog.ShowDialog() == false)
{
return;
}
string txtFile = openFileDialog.FileName;
しかし、一般的に、ユーザーエクスペリエンスにとって最良のものは、ファイルを直接マウスでドラッグアンドドロップすることです。
100%ネット上でファイルをアップロード

WPFでのファイルドラッグアンドドロップの実装方法について簡単に説明します。
WPFでファイルをドラッグする方法は?
其实很简单,只要拖拽接受控件(或容器)注册这两个事件即可:DragEnter、Drop。
私の効果を見てください:
QuickAppにファイルをドラッグする

Xamlでイベントを登録する
イベントの登録:
<Grid
MouseMove="Grid_MouseMove"
AllowDrop="True"
Drop="Grid_Drop"
DragEnter="Grid_DragEnter"
></Grid>
イベント処理方法:
- Grid_DragEnter処理方法
private void Grid_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.Link;
}
else
{
e.Effects = DragDropEffects.None;
}
}
DropDragEffects.Link:ドラッグアンドドロップファイル操作の処理
- Grid_Dropの処理方法
这是处理实际拖拽操作的方法,得到拖拽的文件路径(如果是操作系统文件快捷方式(扩展名为 lnk),则需要使用 com 组件(不是本文讲解重点,具体看本文开源项目)取得实际文件路径)后,即可处理后续操作(比如文件上传)。
private void Grid_Drop(object sender, DragEventArgs e)
{
try
{
var fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
MenuItemInfo menuItem = new MenuItemInfo() { FilePath = fileName };
// 快捷方式需要获取目标文件路径
if (fileName.ToLower().EndsWith("lnk"))
{
WshShell shell = new WshShell();
IWshShortcut wshShortcut = (IWshShortcut)shell.CreateShortcut(fileName);
menuItem.FilePath = wshShortcut.TargetPath;
}
ImageSource imageSource = SystemIcon.GetImageSource(true, menuItem.FilePath);
System.IO.FileInfo file = new System.IO.FileInfo(fileName);
if (string.IsNullOrWhiteSpace(file.Extension))
{
menuItem.Name = file.Name;
}
else
{
menuItem.Name = file.Name.Substring(0, file.Name.Length - file.Extension.Length);
}
menuItem.Type = MenuItemType.Exe;
if (ConfigHelper.AddNewMenuItem(menuItem))
{
AddNewMenuItem(menuItem);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
3.この論文は
機能は非常にシンプルで、深く求めていない、それを使用します。