方式1: 使用win32控件OpenFileDialog


Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); 

ofd.DefaultExt = ".xml"; 

ofd.Filter = "xml file|*.xml"; 

if (ofd.ShowDialog() == true) 

{ 

     //此处做你想做的事 ...=ofd.FileName; 

} 

方式2: 使用Forms中的OpenFileDialog控件

WPF中是不能直接使用Forms中的控件的,否则会提示找不到Forms名字控件. 如果你仍然要用, 答案便是添加.net 引用reference

System.Windows.Forms.OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); 

openFileDialog1.InitialDirectory = "c:\\"; 

openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 

openFileDialog1.FilterIndex = ; 

openFileDialog1.RestoreDirectory = true; 

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 

{ 

    //此处做你想做的事 ...=openFileDialog1.FileName; 

}

类似的有文件夹浏览对话框:

System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); 

System.Windows.Forms.DialogResult result = folderBrowserDialog.ShowDialog(); 

if (result == System.Windows.Forms.DialogResult.OK) 

{ 

    tb_FolderPath.Text = folderBrowserDialog.SelectedPath; 

} 

方式三: 使用win32 api

BOOL WINAPI GetOpenFileName(  __inout  LPOPENFILENAME lpofn)

使用这种方式, 你需要自己实现LPOPENFILENAME结构和对GetOpenFileName方法就行封装:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 

public class OpenFileName 

{ 

    public int structSize = ; 

    public IntPtr hwnd = IntPtr.Zero; 

    public IntPtr hinst = IntPtr.Zero; 

    public string filter = null; 

    public string custFilter = null; 

    public int custFilterMax = ; 

    public int filterIndex = ; 

    public string file = null; 

    public int maxFile = ; 

    public string fileTitle = null; 

    public int maxFileTitle = ; 

    public string initialDir = null; 

    public string title = null; 

    public int flags = ; 

    public short fileOffset = ; 

    public short fileExtMax = ; 

    public string defExt = null; 

    public int custData = ; 

    public IntPtr pHook = IntPtr.Zero; 

    public string template = null; 

} 

public class LibWrap 

{ 

    // Declare a managed prototype for the unmanaged function. 

    [DllImport("Comdlg32.dll",SetLastError=true,ThrowOnUnmappableChar=true, CharSet = CharSet.Auto)] 

    public static extern bool GetOpenFileName([In, Out] OpenFileName ofn); 

}

之后的工作就是实例化、初始化和方法调用了:

OpenFileName ofn = new OpenFileName(); 

ofn.structSize = Marshal.SizeOf(ofn); 

ofn.filter = "Project files\0*.xml"; 

ofn.file = new string(new char[]); 

ofn.maxFile = ofn.file.Length; 

ofn.fileTitle = new string(new char[]); 

ofn.maxFileTitle = ofn.fileTitle.Length; 

ofn.initialDir = "C:\\"; 

ofn.title = "Open Project"; 

ofn.defExt = "xml"; 

ofn.structSize = Marshal.SizeOf(ofn); 

if (LibWrap.GetOpenFileName(ofn)) 

{ 

    //此处做你想做的事 ...=ofn.file; 

} 

WPFの操作文件浏览框几种方式的更多相关文章

  1. 文件对话框WPF(5)----文件浏览对话框

    废话就不多说了,开始... WPF中文件浏览对话框的实现可以利用Windows API Code Pack,它是一个用于访问Windows Vista/7 特性的托管代码函数库,但并没有包含在.NET ...

  2. Linux经常使用的文件传输的几种方式

    Linux经常使用的文件传输的几种方式 1.终端新建stfp协议连接 或者命令方式: sftp -P22 root@192.168.11.100 端口可以不用填写,默认是22,端口的P是大写. 将本地 ...

  3. Django文件上传三种方式以及简单预览功能

    主要内容: 一.文件长传的三种方式 二.简单预览功能实现 一.form表单上传 1.页面代码 <!DOCTYPE html> <html lang="en"> ...

  4. 转载:删除github上文件夹的两种方式

    http://www.jianshu.com/p/286be61bb9b8 删除github上文件夹的两种方式(解决已经加入ignore的文件夹无法从远程仓库删除的问题) 如果此文件夹已被加入git追 ...

  5. PHP读取文件内容的五种方式(转载)

    php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); php读取文件内容: -----第一种方法--- ...

  6. python学习之文件读写入门(文件读的几种方式比较)

    1.文件读写简单实例:(以w写的方式打开一个文件,以r读一个文件) # Author : xiajinqi # 文件读写的几种方式 # 文件读写 f = open("D://test.txt ...

  7. Java实现文件复制的四种方式

    背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...

  8. java文件读写的两种方式

    今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码: public static void main(String[] args) throws IOExceptio ...

  9. 办公室的远程传文件 的命令三种方式linux

    不同的Linux之间copy文件常用有3种方法: 第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种方法就是 ...

随机推荐

  1. Hive基础之Hive与关系型数据库的比较

    Hive与关系型数据库的比较     使用Hive的CTL(命令行接口)时,你会感觉它很像是在操作关系型数据库,但是实际上,Hive和关系型数据库有很大的不同.       1)Hive和关系型数据库 ...

  2. [转].Python中sorted函数的用法

    [Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副 ...

  3. [转]Ionic国际化解决方案

    本文转自:http://www.cnblogs.com/crazyprogrammer/p/7904436.html 1.     核心内容 使用Angular2的国际化(i18n)库:ngx-tra ...

  4. SQL 两个时间获取相差秒数

    SELECT DATEDIFF(SECOND, '2005-12-31 23:59:00', '2006-01-01 00:00:00');

  5. Owin 自寄宿 asp.net web api

    http://owin.org/ Owin 定义了webserver和webapplication之间的标准接口,目标就是为了解耦webapplication对webserver的依赖, 就是说以后可 ...

  6. authentication plugin caching_sha2_password cannot be loaded

    最近下载新的MySQL8.0 来使用的时候, 通过sqlyog.或者程序中连接数据库时,提示:Authentication plugin 'caching_sha2_password' cannot ...

  7. Java集合的选择

    我们在使用集合时应该使用哪个集合呢? 具体还是要看需求, 当然, Java中不只是有这几个, 还有一些没有给出, 具体情况具体分析吧, 仅给出一个小思路. 进行集合的选择:  是否是键值对象形式: 一 ...

  8. ORM作业

    使用之前学到过的操作实现下面的查询操作:1. 查询平均成绩大于60分的同学的id和平均成绩:2. 查询所有同学的id.姓名.选课的数量.总成绩; 3. 查询姓“李”的老师的个数: 4. 查询没学过“李 ...

  9. Python 类的特殊成员介绍

    类的成员有两种形式 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线. class Foo: def __init__(self, name, age ...

  10. 2017-12-26 Java关键字的汉化用词探讨

    @狗屎咖啡 的为GCC添加中文关键字项目对C关键词进行了汉化. 风格比较简约, 如'if'-如, 'else'-另. 个人感觉在中文编程语言尚未成熟之时, 不妨集思广益, 首先列出一些可选项, 然后从 ...