C#WinForms或WPF文件对话框提示打开、保存或取消我在代码隐藏中创建的文件
我正在根据用户的数据创建一个特定用户操作的文件 现在我想给他一个自定义对话框,可以打开或保存文件,就像你下载文件时得到的一样 我想要的样本: 我知道“打开文件”对话框(可以从磁盘打开现有文件)和“保存文件”对话框(允许我保存文件),但是否有任何对话框或控件可以同时具有WPF或Winforms的选项? WPF是首选,但我也可以使用Winforms控件 编辑:感谢您的反馈。因为似乎没有内置控件或第三方控件,所以我选择自定义控件C#WinForms或WPF文件对话框提示打开、保存或取消我在代码隐藏中创建的文件,c#,wpf,winforms,file,dialog,C#,Wpf,Winforms,File,Dialog,我正在根据用户的数据创建一个特定用户操作的文件 现在我想给他一个自定义对话框,可以打开或保存文件,就像你下载文件时得到的一样 我想要的样本: 我知道“打开文件”对话框(可以从磁盘打开现有文件)和“保存文件”对话框(允许我保存文件),但是否有任何对话框或控件可以同时具有WPF或Winforms的选项? WPF是首选,但我也可以使用Winforms控件 编辑:感谢您的反馈。因为似乎没有内置控件或第三方控件,所以我选择自定义控件 你知道如何获得文件类型缩略图和文件类型长名称吗 按钮功能本身很简单,我
你知道如何获得文件类型缩略图和文件类型长名称吗
按钮功能本身很简单,我可以管理它。对于未设置为在浏览器中打开的文件类型,您可以依靠不可见的
WebBroser
控件和调用导航
方法,并将临时文件名传递给它:
webBrowser1.Navigate(@"C:\windows\temp\somefile.xyz");
如果不能令人满意,您需要滚动自己的对话框
创建自定义下载对话框 在决定实现自定义对话框的情况下,可以使用来提取有关文件的信息,包括图标和文件类型描述 例如,首先声明和结构以及必需的常量:
[DllImport("shell32")]
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes,
out SHFILEINFO psfi, uint cbFileInfo, uint uflags);
[StructLayout(LayoutKind.Sequential)]
private struct SHFILEINFO {
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
}
private const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;
private const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;
private const uint SHGFI_ICON = 0x000000100;
private const uint SHGFI_DISPLAYNAME = 0x000000200;
private const uint SHGFI_TYPENAME = 0x000000400;
private const uint SHGFI_ATTRIBUTES = 0x000000800;
然后您可以通过以下方式使用该方法:
var info = new SHFILEINFO();
SHGetFileInfo(filename, FILE_ATTRIBUTE_NORMAL, out info, (uint)Marshal.SizeOf(info),
SHGFI_ICON | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
var fileDisplayName = info.szDisplayName;
var fileTypeName = info.szTypeName;
var fileTypeImage = Icon.FromHandle(info.hIcon).ToBitmap();
然后您可以创建这样的对话框:
下载示例
您可以从以下存储库下载工作示例: