Jehoel.ShellFileDialogs 1.2.0
dotnet add package Jehoel.ShellFileDialogs --version 1.2.0
NuGet\Install-Package Jehoel.ShellFileDialogs -Version 1.2.0
<PackageReference Include="Jehoel.ShellFileDialogs" Version="1.2.0" />
paket add Jehoel.ShellFileDialogs --version 1.2.0
#r "nuget: Jehoel.ShellFileDialogs, 1.2.0"
// Install Jehoel.ShellFileDialogs as a Cake Addin #addin nuget:?package=Jehoel.ShellFileDialogs&version=1.2.0 // Install Jehoel.ShellFileDialogs as a Cake Tool #tool nuget:?package=Jehoel.ShellFileDialogs&version=1.2.0
ShellFileDialogs
这是什么?
如果您想使用 Windows Vista 后的现代文件打开、文件保存和文件夹浏览器对话框,则需要使用 Shell COM API,并且需要处理所有 Shell COM 接口和类型。
Microsoft Windows API Code Pack 会为您处理这些,您需要的同时安装 Microsoft.WindowsAPICodePack.dll 和 Microsoft.WindowsAPICodePack.Shell.dll - 总共计 632KB,Microsoft 也未能及时更新,因此 NuGet 上的最新软件包并非由 Microsoft 提供。它还提供了您可能不需要的更多功能。
而此组件只有 32KB,仅关于外壳对话框 - 而不是任何新的外壳和平台功能。您还可以将原始文件复制并粘贴到您自己的项目中。
NuGet
此库在 NuGet 上以两种形式提供
Jehoel.ShellFileDialogs
这是一个普通的 NuGet 软件包,包含为以下内容提供的单独的 assembly DLL(包含 PDB 和 XML 文档)
- .NET Framework 4.8
- .NET Standard 2.0
- .NET Core 3.1(包括 C# 8.0 可空引用类型注释)
<del>Jehoel.ShellFileDialogs.Content
</del>
(此包(Jehoel.ShellFileDialogs.Content
)尚未发布,因为我无法让 NuGet 正常工作)
此 NuGet 包包含 ShellFileDialogs
作为 C# 源文件,并将其作为内容文件添加到您的项目中。然而,根据您的项目配置,其行为差异很大:
如果您正在使用 SDK 风格的项目,或者与非 SDK 风格项目一起使用<PackageReference>
......则 C# 源内容文件不会直接添加到您的项目中,而是在构建过程中添加。请注意,您不能(容易地)直接修改这些文件。这就是 NuGet 现在处理包内容文件的方式(即作为不可变内容)。
如果您正在使用旧式的package.config
......则 C# 源文件将添加到您项目的新子目录ShellFileDialogs
中,您可以在其中按需编辑文件,但重新安装此 NuGet 包将覆盖您的更改。
用法
该 API 故意设计得简单。它可以安全地从任何上下文使用:控制台、WPF 或 WinForms。所有的 ShowDialog
方法都接受父窗口的 IntPtr hWnd
。如果没有父窗口,您也可以指定 IntPtr.Zero
。
文件夹浏览器对话框
String selection = FolderBrowserDialog.ShowDialog( IntPtr.Zero, "Title", null );
if( selection == null )
{
// Dialog cancelled
}
else
{
Console.WriteLine( selection );
}
文件打开对话框
单个文件
Filter[] filters = new Filter[]
{
new Filter( "Images", "gif", "png", "jpg", "jpeg", "heic", "webp" ),
new Filter( "Videos", "mov", "wmv", "mp4", "mpeg", "mpg", "avi", "webm" ),
new Filter( "Audio" , "mp3", "wma", "wav", "aac" ),
new Filter( "All files" , "*" ),
};
String selection = FileOpenDialog.ShowSingleSelectDialog( IntPtr.Zero, "Title", initialDirectory: null, defaultFileName: null, filters: filters );
if( selection == null )
{
// Dialog cancelled
}
else
{
Console.WriteLine( selection );
}
多个文件
// The Filter class can parse WinForms filters:
Filter[] filters = Filter.ParseWindowsFormsFilter( @"Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*" );
String[] fileNames = FileOpenDialog.ShowMultiSelectDialog( IntPtr.Zero, "Title", initialDirectory: null, defaultFileName: null, filters: filters );
if( selection == null )
{
// Dialog cancelled
}
else
{
foreach( String fileName in fileNames ) Console.WriteLine( fileName );
}
文件保存对话框
String fileName = FileSaveDialog.ShowDialog( IntPtr.Zero, "Title", initialDirectory: null, defaultFileName: null, filters: filters );
if( fileName == null )
{
// Dialog cancelled
}
else
{
Console.WriteLine( "Save file dialog. Selected file: \"{0}\".", fileName );
}
反馈和建议
请发布到 GitHub 项目的问题页面:https://github.com/Jehoel/ShellFileDialogs/issues
产品 | 版本 兼容的和额外的目标框架版本。 |
---|---|
.NET | net5.0 已计算. net5.0-windows 已计算. net6.0 已计算. net6.0-android 已计算. net6.0-ios 已计算. net6.0-maccatalyst 已计算. net6.0-macos 已计算. net6.0-tvos 已计算. net6.0-windows 已计算. net7.0 已计算. net7.0-android 已计算. net7.0-ios 已计算. net7.0-maccatalyst 已计算. net7.0-macos 已计算. net7.0-tvos 已计算. net7.0-windows 已计算. net8.0 已计算. net8.0-android 已计算. net8.0-browser 已计算. net8.0-ios 已计算. net8.0-maccatalyst 已计算. net8.0-macos 已计算. net8.0-tvos 已计算. net8.0-windows 已计算. |
.NET Core | netcoreapp3.1 兼容. |
.NET Framework | net48 兼容. net481 已计算. |
-
.NETCoreApp 3.1
- 无依赖项。
-
.NETFramework 4.8
- 无依赖项。
NuGet 包
此包没有被任何 NuGet 包使用。
GitHub 仓库
此包没有被任何流行的 GitHub 仓库使用。
版本 | 下载 | 最后更新 |
---|---|---|
1.2.0 | 456 | 4/14/2021 |
1.0.0 - 从未发布。
1.1.0 - 从未发布。
1.2.0 - 作为 NuGet 包的初始发布。