0%

【C#】WPF基础:基本控件篇


①基础知识

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
2
3
4
5
6
7
8
void Button3_MouseWheel(object sender, EventArgs e)
{
MouseEventArgs args = (MouseEventArgs) e;
if (args.Delta > 0)
{
MessageBox.Show("上滚");
}
}

可空类型

可以为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
2
3
<Button Click="subButton_Click">
<Name>"subButton"</Name>
</Button>

这种写法在控件属性较多时便显得一目了然,便于控制了。

注意!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
2
3
4
5
<控件>
<控件.Content>
(...其他控件)
</控件.Content>
</控件>

有的控件中只允许添加一个控件,可以添加一个布局(StackPanel、Grid)来容纳多个控件。

③WPF控件常用属性简介

未特殊声明的情况下,以下用法仅可在XAML中使用,不可在Class中使用。

0.Button按钮

用法:

插入文字:

1
2
3
4
XAML:
<Button Content="TextHere" />
===================================
<Button>"TextHere"</Button>

以上这俩效果相同 插入图片:

1
2
3
4
5
6
7
8
9
10
XAML:
<Button>
<Button.Content>
<Image Source="图片的相对地址"></Image>
</Button.Content>
</Button>
==================可省略为==================
<Button>
<Image Source="图片的相对地址"></Image>
</Button>

这里只有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
2
Image img = new Image();//创建一个图片控件
img.Source=new BitmapImage(new Uri("图片的相对路径",UriKind.Relative));

⒎ProgressBar进度条

IsIndeterminate:不确定模式,进度条内的进度一条一条滚动前行,表示程序正在运行。bool类型,true启用。 Maximum:最大值 Minimum:最小值 Value:当前值

⒏Menu菜单

菜单分为普通菜单(Menu)和上下文菜单(ContextMenu,俗称右键菜单)。 WPF中的Menu可以显示在任意位置,但是一般是用布局显示到页面顶部。 Menu下面可以放多个MenuItem(其实是放到Items属性中)。MenuItem下还可以放MenuItem(还是Items属性中),属性Header显示内容。

使用方法:

1
2
3
4
5
6
7
<Menu>
<MenuItem Header="标题名1" /> 子菜单标题
<MenuItem Header="标题名2" >
<MenuItem Header="标题名2.1" /> 孙菜单标题
<MenuItem Header="标题名2.2" />
</MenuItem>
</Menu>

把Menu “拼”到窗口顶部详见布局篇 示例: 效果:

⒐ToolBar工具栏

工具栏就是一般在菜单栏下面的用作快速打开菜单栏内项目的工具,像: 就是工具栏。

使用方法:

1
2
3
<ToolBar>
(...控件)
<\ToolBar>

示例: 效果: 由上图可以看出,某些控件包含入工具栏后外观会有变化。比如RadioButton、CheckBox等。