WPF的Button学习---(Button RepeatButton ToggleButton CheckBox RadioButton)

·Button

·RepeatButton

·ToggleButton

·CheckBox

·RadioButton

 

1.Button

WPF 的按钮类只在ButtonBase 现有基础上加了个简单的概念:是一个取消按钮还是一个默认按钮。这

种机制对于对话框来说是一种捷径。如果对话框上一个按钮的Button.IsCancel 被设置成了True,你点击了

那个按钮,这个对话框会自动关闭。如果Button.IsDefault 被设置成了true,除非焦点不在这个按钮上,否

则按回车就会触发这个按钮的Click 事件。

按钮控件的IsDefault 和IsDefaulted 属性有什么差别?

IsDefault 属性是一种可读写属性,可以决定按钮是否应该是默认的。IsDefaulted 名字取得比较烂,它是

只读属性,表示按钮的某一状态,比如按回车键会使它处于点击状态。换句话说,当IsDefault 是true 的时

候,IsDefaulted 只能是true,并且不管是默认按钮还是TextBox(同时AcceptsReturn 被设为false)获得了

焦点。这个特性使得你可以通过按回车键来触发默认按钮的点击事件,即使这时焦点在TextBox 上。

如何才能以编程方式点击一个按钮?

按钮和其他WPF 控件一样,有一个属于System.Windows.Automation.Peers 命名空间的peer 类来支持

UI Automat ion:ButtonAutomat ionPeer,可以这样使用它:

4

UI Automat ion 类有许多对于自动测试相当有用的成员。

2.RepeatButton

RepeatButton 的行为基本和Button 一样,除了它会在按钮一直被按着的情况下触发点击事件(它没有

Button 的取消和默认这两种行为,因为它直接继承自ButtonBase)。产生点击事件的频率主要由RepeatButton

的Delay 以及Interval 这两个属性的值决定;这两个属性的默认值分别是SystemParameters.KeyboardDelay

以及SystemParameters.KeyboardSpeed。默认情况下,Repeat- Button 看起来和Button 一样(如图4-1 所示)。

RepeatButton 的行为乍听起来很奇怪,其实它对于计算一段时间内某个按钮被按次数的增减统计是非常

有用的。例如,当用鼠标点在上面,保持长时间不释放时,滚动条底下的那个按钮就可以展示被重复按下

的行为,或者你在做一个数字的“上下”控件(WPF 没有内建这种控件),你会使用两个RepeatButton 去控

制数字的大小。RepeatButton 属于System.Windows.Controls.- Primit ives 命名空间,你应该会把它和其他成

熟的控件一起使用,而不是单独使用它。

3.ToggleButton

ToggleButton 是一种在点击时可以保留其状态的“粘性”按钮(它也没有Button 控件的取消行为以及默

认行为)。第1 次点击它的时候,IsChecked 属性会被设为true;再点击一次,就被设为了false。ToggleButton

的默认外观和Button 以及RepeatButton 完全一样。

ToggleButton 还有一个IsThreeState 属性,如果把它设为true 的话,IsChecked 就会有3 种值:true、false

或者null。事实上,IsChecked 是Nullable<Boolean>类型的。第1 次点击ToggleButton 会把IsChecked 设为

true,第2 次则把它设为null,第3 次把它设为false,依此类推。

除了IsChecked 属性以外,ToggleButton 分别为每一个IsChecked 的值定义了不同的事件:true 对应

Checked 事件,false 对应Unchecked 事件,null 对应Indeterminate 事件。ToggleButton 没有单独的

IsCheckedChanged 事件似乎很奇怪,但是3 种不同的事件便于声明。

和RepeatButton 一样,ToggleButton 也属于System.Windows.Controls.Primitives 命名空间,这意味着

WPF 的设计器并不期望用户在没有额外定制的情况下直接使用ToggleButton。这个设想很自然,但在后面

的章节里你会看到,如何在一个ToolBar 里直接使用ToggleButton。

4.CheckBox

CheckBox 是一种常见的控件,如图4-2 所示。但是请等一下……这一节难道不是在讨论按钮控件吗?

没错,不过请先想一下WPF CheckBox 的特性:

·它拥有由外部提供的内容(所以不算标准的复选框)。

5

·它可以区分是被鼠标点击还是被键盘点击。

·它可以在被点击时记录选中(checked)或者未选中(unchecked)状态。

·它支持3 种状态模式,分别为选中(checked)、不确定(indeterminate)、未选中(unche- cked)。

听起来觉得似曾相识吗?应该很熟悉吧,因为CheckBox 和ToggleButton 只有外观上的差别!CheckBox

除了在继承ToggleButton 时重写了控件默认样式以及视觉外观以外,其他都与ToggleButton 完全一样,如

图4-2 所示。

图4-2 WPF CheckBox

5.RadioButton

RadioButton 是另一种从ToggleButton 继承过来的控件,但它的特殊在于支持互斥性。当多个RadioButton

被放在一个组里,一次只有一个可以被选中,把一个RadioButton 选中就会自动把组中其他所有的

RadioButton 设为不选中。事实上,用户不能直接通过选中RadioButton 来取消对它本身的选中,这一动作

只能通过编程方式来完成。因此,RadioButton 是为多项选择所设计的。RadioButton 的默认外观如图4-3 所

示。

图4-3 WPF RadioButton

把几个WPF RadioButton 放在同一组里是非常直观的。默认情况下,任何RadioButton 被自动分成一个

组,共享同一个逻辑父元素。比如,以下几个RadioButton 一次只有一个可以被选中:

如果需要用自定义的方法对RadioButton 作分组,那么可以用它的GroupName 属性,这个属性是字符

串类型的,任何拥有相同GroupName 的RadioButton 会被分在同个组里(只要它们在逻辑上属于同一个源)。

因此可以把属于不同父元素的RadioButton 放在一个组中:

你可能感兴趣的:(RadioButton)