①基础知识
1.参数sender
一般我们新建事件后vs都会自动帮我们创建事件引发的方法,比如
1 | private void button1_Click(object sender,RoutedEventArgs e){...} |
sender代表发生事件的控件,被封装为了object类型,所以如果我们想要引用之,需要显示转换。如鼠标单击按钮的事件中,若我们想获得被单击的按钮控件,可以写为
1 | Button button =(Button)sender; |
2.参数e
参数e一般为EventArgs和RoutedEventArgs类型,RoutedEventArgs类型是路由事件,是一种特殊的EventArgs类型,我们将在以后学习,现在我们主要来讨论EventArgs类型: 如果object sender看作事件的主体,那么EventArgs e就可以看作事件的参数,形象一点说,如果把用户看作农夫,要完成“锄地”的动作,就要使用“锄头”这个sender,如此“锄地”事件发生时,系统就会把锄头落地的坐标、锄地的频率等等与锄地事件有关的信息打包成事件参数e发送给我们。 那么怎样使用这些数据呢? 与参数object相同,EventArgs类型也是事件参数的一个“大类型”,要想使用之必须经过显示转换,在这之前我们需要知道这是由鼠标触发的事件(MouseEventArgs)还是键盘触发的事件(KeyPressEventArgs)抑或是其他东西触发的事件,如果转换为了错误的事件参数就会导致程序出错。
鼠标事件(MouseEventArgs)
鼠标事件常用的字段有: Button:表示用户按下鼠标哪个键触发了动作(左键Left、右键Right,在枚举类型MouseButtons中) Delta:表示用户触发事件的滚轮方向,这个值是方向(上滚为1,下滚为-1)乘以一个叫WHEEL_DELTA的常数(我这里测试为120,总之跟据符号就可以得到滚轮方向,值的大小不重要) Click:触发事件所按下键的次数 Location/X/Y:触发事件时鼠标的方位
键盘事件(KeyPressEventArgs)
键盘事件常用的字段有: KeyChar:触发事件时按下的键,注意是char类型不是keys类型。 例判断用户是否为向上滚出发的事件:
1 | void Button3_MouseWheel(object sender, EventArgs e) |
可空类型
可以为Null的类型称可空类型,有些类型(如int)默认初始化为0,所以无论如何也不会为空,故称不可空类型。 可空数据类型:引用类型(自定义类、string等等) 不可空数据类型:值类型(int、boolean、decimal、DateTime等等) 注意string s=””不等于string s=null。 第一个意义为长度为零的字符串,第二个意义为没有指向任何对象的字符串。 如果需要一个可空的值类型怎么办呢? 在类型后加一个问号,如
1 | int? i=null; |
实际上,就是把值类型转换为了引用类型 int类型可以隐式转换为int?类型,反之则不能。就像float可以隐式转换为double类型反之也不能一样,谨记,范围小的转换为范围大的可以隐式转换,反之只能显示转换! 如果int? i=null转换为int类型就算显示转换也会报错。
②WPF入门
WPF使用xaml文件来设计窗口、控件等可视化交互,当然也可以在其中创建winform的类窗体(class)。它与winform最大的不同就是xaml设计的窗口、控件与主窗口功能代码在一个类中,所以WPF设计出的多窗口只需实例化无需设置访问性。
初识xaml
xaml语法上类似于html,标题尖括号打头,反斜杠标题尖括号结尾。 这与winform相比开发起来更加直观。 如 可在其中为控件添加各种属性,写法也有两种,常见的为:
1 | <Button Name="subButton" Click="subButton_Click" /> |
这种写法的优点是字少,写起来比较方便,但是当添加属性过多时就会显得长而冗杂,于是又有这种写法:
1 | <Button Click="subButton_Click"> |
这种写法在控件属性较多时便显得一目了然,便于控制了。
注意!xaml的注释方法为
1 | <!--</span></strong>被注释的语句,可跨行<strong><span style="color: #339966;">--> |
控件的通用属性
Name:空间名,唯一,用于区分控件 Content:空间上的文本,不唯一 Visbility:控件的可见性(值是枚举类型,不是bool类型!在System.Windows.Visbility下,Collapsed为隐藏,Visible为可见) IsEnabled:空间是否可用,bool类型 Background:背景色,在等于号后按下Ctrl+J即可调出颜色提示栏 FontSize:字体大小 在控件中添加控件:
1 | <控件> |
有的控件中只允许添加一个控件,可以添加一个布局(StackPanel、Grid)来容纳多个控件。
③WPF控件常用属性简介
未特殊声明的情况下,以下用法仅可在XAML中使用,不可在Class中使用。
0.Button按钮
用法:
插入文字:
1 | XAML: |
以上这俩效果相同 插入图片:
1 | XAML: |
这里只有Button可省略.Content。
⒈TextBox文本输入框
可见、可输入文本的控件,若只需要可见文本可使用TextBlock控件。
Text:内容文本 IsReadOnly:设置是否只读,bool类型,设置为true后无法对文本进行修改(可以复制) TextWrapping:枚举类型,设置为Wrap可自动折行 MaxLength:文本框内可输入字符的最大数量,整形
⒉PasswordBox密码框
自动掩盖输入文本的控件
Password:输入的文本,注意不是Text了。
⒊CheckBox复选框
IsChecked:表示复选框是否已被选中,bool?类型,所以不能直接用if判断
⒋RadioButton单选按钮
要求用户对一个组进行单选的控件
IsChecked:表示单选按钮是否已被选中,bool?类型。 GroupName:组名,一组单选按钮只能选择一个。
⒌DatePicker日期选择器
SelectedDate:选择的日期,DateTime?类型,包含日期和时间。可为null,意义为未选择。(DateTime.Now为当前时间)
6.Image图片控件
Source:图片路径,路径为相对路径,即以程序视图的路径,若直接把图片资源放入程序文件夹内,则可以直接输入文件名。在Class中写法如下:
1 | Image img = new Image();//创建一个图片控件 |
⒎ProgressBar进度条
IsIndeterminate:不确定模式,进度条内的进度一条一条滚动前行,表示程序正在运行。bool类型,true启用。 Maximum:最大值 Minimum:最小值 Value:当前值
⒏Menu菜单
菜单分为普通菜单(Menu)和上下文菜单(ContextMenu,俗称右键菜单)。 WPF中的Menu可以显示在任意位置,但是一般是用布局显示到页面顶部。 Menu下面可以放多个MenuItem(其实是放到Items属性中)。MenuItem下还可以放MenuItem(还是Items属性中),属性Header显示内容。
使用方法:
1 | <Menu> |
⒐ToolBar工具栏
工具栏就是一般在菜单栏下面的用作快速打开菜单栏内项目的工具,像: 就是工具栏。
使用方法:
1 | <ToolBar> |