WPF,Silverlight与XAML读书笔记第二十一 - 控件之三 – 内容控件之选择控件&信息显示控件

时间:2022-01-03 06:08:01

说明:本系列基本上是《WPF揭秘》的读书笔记。在结构安排与文章内容上参照《WPF揭秘》的编排,对内容进行了总结并加入一些个人理解。

 

 

CheckBox控件(WPF/Silverlight2.0)

CheckBox继承自ToggleButton所以这两者行为完全一致,仅是用有不同的默认样式与视觉外观。其主要用于允许有多个可选项的情况。

CheckBox控件有与ButtonBase中完全相同的ClickMode属性来定义选中CheckBox控件的方式,同样点击发生时也会触发Click事件。而CheckBox被选中及被清空时分别触发的Checked与Uncheck对象是该控件最主要的事件。

通过IsThreeState属性可以控件CheckBox是否启用三种状态模式,包括选中、未选中和不确定。当CheckBox在未选中状态下时,IsChecked的值为null,另外两种状态下这个属性的值为true或false。

作为一个内容控件,同样可以使用内容属性的语法给CheckBox添加自定义的内容,具体实现可以模仿Button介绍部分。

 

RadioButton控件(WPF/Silverlight2.0)

RadioButton也是继承自ToggleButton,特殊的是其支持互斥性,即主要用于单选的情况。当一个组中包含多个RadioButton是,只有一个可以被选中。可以通过GroupName自定义RadioButton的分组。

在使用中我们把多个RadioButton控件一起放到一个容器控件中,通过放在不同的容器中可以实现与使用GroupName属性一样的分组效果。RadioButton也拥有定义于ButtonBase中的ClickMode属性,有关这个属性的详细信息可以参见ButtonBase部分的介绍。类似CheckBox控件,也有一个IsChecked属性用来检查一个RadioButton是否被选中。

 

Label控件(WPF1.0)

    同以往许多编程技术中的Label控件一样,WPF中的Label也是用于存放文字。

    作为一种WPF的内容控件,Label的Content属性也可以包含如Button,Menu等内容。但通常情况下其只用来存放文本。Label比起其他显示文本技术(如TextBlock元素)独到的一点在于其支持访问键。

提示:访问键

用户可以通过按下"Alt键+字母键"来将焦点指定到相应的元素。这种与字母元素对应的方式是通过在文本中字母前加一条下划线来设置的。

    Label访问键的一个高级应用是其可以与另一个控件配合实现当按下访问键时将焦点移到这个指定的目标控件上。

示例,当按下Alt+U时,将焦点定位在TextBox上。

XAML:

1 <Label Target="{Binding ElementName=userName}" x:Name="unLabel">_User Name</Label> 
2 <TextBox x:Name="userName" />

C#:

1 unLabel.Target = userName;

 

TextBlock (Silverlight2.0)

    TextBlock控件用于在Silverlight程序中显示一段文本信息。最基本的TextBlock通过Text属性来显示文本。通过FontSize属性可以改变文本的大小(单位为像素),通过FontFamily来设置文本的字体(Silverlight 2.0以后设置任意字体,如果用户系统中不存在此种字体,则使用默认字体),通过FontStyle属性可以将文字设置为斜体等。

    另外在TextBlock控件中可以使用<LineBreak>进行换行,位于其后的文字将出现在一个新行上。而另一个<Run>标签用来组合不同的段落,Run标签中也支持TextBlock的FontFamily等属性,从而实现将不同样式的文本组合在一起。另外在<Run>标签中可以放入不同类型(即非文本)的对象。

 

ToolTip (WPF1.0)

    ToolTip控件把其内容放在一个浮动框中,当鼠标移到相关联元素之上时,显示ToolTip的内容,鼠标移开后ToolTip内容消失。实现示例:

XAML:

1 <Button>
2 OK
3 <Button.ToolTip>
4 <ToolTip>
5 This is ToopTip's Content.
6 </ToolTip>
7 </Button.ToolTip>
8 </Button>

从上可以看出,ToopTip必须放在另一个元素的ToopTip属性中而不单独出现。另外:由于ToopTip属性是Object类型,所以置于其中的任何对象都会被转化为ToolTip。这样上述代码可以简化为下面形式:

XAML:

1 <Button>
2 OK
3 <Button.ToolTip>
4 This is ToopTip's Content.
5 </Button.ToolTip>
6 </Button>

更简单的写法:

1 <Button Content="OK" ToolTip="This is ToopTip's Content."></Button>

 

ToolTip事件

  • Open与Closed:定义ToolTip显示或消失时进行的操作。

 

增强ToolTip – ToolTipService

    ToolTipService定义了一些可以被设置在使用ToolTip的元素(而不是ToolTip元素)上的附加属性。其中部分与ToolTip中相同的属性优先级高于ToolTip。

ToolTipService独有的属性

  • ShowDuration:控制鼠标悬停在一个元素上多久后显示ToolTip;
  • InitialShowDelay:控制ToolTip第一次显示与停止间的时间间隔。
  • ShowOnDisabled:鼠标滑过一个被禁用的元素,仍然显示ToolTip。

这些附加属性的使用方式:

XAML:

1 <Button Content="OK" ToolTip="ToopTip's Content." ToolTipService.ShowDuration="3000"></Button>

C#:

1 ToolTipService.SetShowOnDisabled(myButton, true);
 

 

Frame控件 (WPF1.0)

    Frame控件也可以包含任何内容,不同之处是其把内容与其余的UI相隔离,这样其中内容不由元素树继承。(这种隔离的特性类似于HTML中Frame的隔离)。

属性:

  • Source:这个属性类型为System.Uri,其目标可以为任意HTML或XAML页面。
  • Content: 这个属性的作用在Frame中较弱,所以WPF设计时也屏蔽了XAML中Content作为内容属性的使用方式,但Content的优先级要高于Source属性。

 

本文完

 

参考:

《WPF揭秘》