0%

【C#】WPF基础:多窗口应用篇


①普通窗口

新建一个窗口

与Winform相仿,WPF的窗口也是一个类,但是我们在新建窗口时新建的是一个Xaml(外观)与一个类(功能),而不是Winform那样两个类(外观+功能)了。 既然窗口是个类,那么显示窗口也需要实例化。 然后,调用Show或者ShowDialog方法,像WinForm一样。

自定义窗口

像所有控件一样,窗口也可以在Xaml中设置各种属性,常用属性如下: Title:标题 ResizeMode:定义窗口大小是否可被改变,随之也会改变右上的三个功能键。如设置为“NoResize”不能改变大小,那么三个按钮中就只剩下关闭了,且窗口边框也不可被拖动。 WindowStartupLocation:窗口起始位置,默认在左上角,可设置为“CenterScreen”屏幕中央。 WindowState:默认窗口大小,即窗口打开时默认的大小,有最大化(Maximized)最小化(Minimized)和正常大小(Normal)可选。

窗口之间传值

任何一个窗口的类中创建一个公共的字段,然后另一个窗口调用之即可。有的同学会问,如果在子窗口中创建字段母窗口调用,子窗口一关闭字段还能够被提取吗?这个是可以的,因为C#中的垃圾回收机制是没有调用,则回收。刚刚所说的窗口虽然关闭,但是后面的代码引用到了该对象的内容,那么该对象则不会被销毁,直到最后一次引用结束。

ShowDialog

ShowDialog是一种延迟方法,代码运行至此会等待窗口关闭才会继续运行,这时它与Show方法最大的区别。 另外在弹出的窗口中若给DialogResult属性赋值(Bool?可空布尔类型),则窗口会被关闭,同时ShowDialog会将该值返回。注意若用户点击了关闭按钮,那么默认返回False,而不是Null。

②打开文件对话框

创建打开文件对话框

引入库 Microsoft.Win32

OpenFileDialog ofd=new OpenFileDialog();
ofd.Filter =”文本文件*.txt音乐文件*.mp3,*.wav” //筛选文件
if(ofd.ShowDialog()==true)//是否选择了文件
{
string file=ofd.FileName;
}

需要注意的是,ofd.ShowDialog()返回的是bool?类型的值,故不能直接用if包含。 Filter筛选文件的标准是: 用“”隔开,两个一组,前面是描述,后面是扩展名,若使用多个扩展名则用逗号隔开。

得到文件

调用ofd.FileName可直接得到用户选中的文件地址 若想得到多个文件,则需要提前打开:

ofd.Multiselect=true;

然后调用ofd.FileNames得到一个字符串数组,其内容就是选中的文件的地址.

③保存文件对话框

保存文件对话框与打开文件对话框使用方式基本相同,都需要引入Microsoft.Win32,只不过调用的是SaveFileDialog。如:

SaveFileDialog sfd=new SaveFileDialog();
sfd.Filter =”文本文件*.txt音乐文件*.mp3,*.wav” //筛选文件
if(sfd.ShowDialog()==true)//是否选择了文件
{
string file=sfd.FileName;
}

这里需要注意的是,如果标明了文件格式(Filter可选),用户填入名字后系统会返回“名字+扩展名”的完整地址(用户填不填扩展名无妨),若未标明则需要用户填写或者开发者提前定义好扩展名。