WPF,Silverlight与XAML读书笔记第十九 - 控件之一 – 控件概览

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

 

 

    无论是WPF中的控件还是Silverlight中的控件,它们的控件模型都具有一致性,这样各个不同的控件就可以执行一致的任务,包括:

  • 创建控件的实例;
  • 使用属性更改单个控件的外观;
  • 使用样式更改多个控件的外观;
  • 使用模板为控件创建自定义外观;
  • 处理控件事件。

 

WPF控件概览(针对WPF1.0)

    WPF中按控件的继承关系可以将其分为4大类:内容控件、Item控件、Range控件及文本与墨水控件。它们的关系如下图所示:

  1. 内容控件

    内容控件继承自System.Windows.Controls.ContentControl,其包含一个object类型的Content属性,只有这个属性可以接受子元素,即内容控件中只能包含一个单一项(item)。

    内容控件还有一个HasContent属性表示Content属性是否为空,其主要用于XAML中,属性触发器可以根据此属性方便的进行其他操作。

    内容控件可以分为三大类:按钮,简单按钮,带头(head)的容器。(Window类也是一种内容控件)。

  1. Items控件

    Items控件包含一个拥有多条Item的集合而不仅是一条内容。所有的Items控件都是继承自ItemsControl。ItmsControl把它的内容保存在一个ItemsCollection类型的Items属性中。Item可以是任意类型,它们的渲染方式是:属于UIElement的Item按其自身方式渲染;其它类型对象使用ToString()方法取得字符串并置于TextBlock中呈现。

    属性说明:

  • Items属性:上文已提到此属性,注意此属性为只读,不能直接将一个集合指定给此属性。
  • ItemsSource属性:通过这个属性可以把一个任意类型的集合赋给Items属性。
  • HasItems属性:只读布尔值表示Item集合是否为空。(通过Items.Count可以获取Item集合元素的个数)。
  • IsGrouping属性:只读布尔值,指示控件的Items是否被分为顶层组。
  • DisplayMemberPath属性:此属性为字符串类型,其设置在Item控件上,用于改变所有项被呈现的方式。

示例:假如某ListBox控件有如下Item:

1 <ListBox> 
2 <sys:DateTime>1/1/2009</sys:DateTime> 
3 </ListBox>

按默认呈现方式 ,由于其不属于UIElement类的元素,会被渲染成如下元素:

1 <TextBlock>1/1/2009</TextBlock>

为Item元素添加如下DisplayMemberPath:

1 <ListBox> 
2 <sys:DateTime DisplayMemberPath="DayOfWeek">1/1/2009</sys:DateTime> 
3 </ListBox>

这时将会渲染DisplayMemberPath属性,则呈现结果就变为Monday。

注意:如果Item项不支持DisplayMemberPath给出的属性,则将呈现空白。

 

DisplayMember:可以接受路径属性。

属性路径表现为一个或多个属性组成的有序的字串,这些属性以"点"分隔。后面的属性是其前邻的对象的属性。属性中也可以使用索引器和数组。

 

 

接下来的话题转向Silverlight。

Silverlight控件概览(针对Silverlight2.0)

    Silverlight由2.0版本开始增加了大量新控件,与WPF类似所有这些控件也都继承自FrameworkElement类,它们也都支持丰富的控件模板类型,这些控件可以大致分为以下基类(根据继承关系):

  • 面板控件:这类控件派生自Panel类,如Canvas、Grid等。
  • 内容控件:这些控件由ContentControl类派生,提供了Content属性,用于定制控件的内容,如Button控件等。
  • 列表控件:这些控件派生自ItemsControl,常用于显示集合数据,代表控件如ComboBox,ListBox控件等。
  • 普通控件:这类控件直接派生于Control类(自定义控件时也常会从Control类派生),这类控件如TextBox、PasswordTextBox控件等。
  • 其它控件:这类控件直接派生于FrameworkElement类,而不是由Control类派生。如Image控件。

这些控件之间的关系如下:

Silverlight控件按功能可以划分如下几类:

  • 命令控件:响应来自鼠标、键盘、手写笔或其他输入设备的用户输入,并引发Click事件,如Button、HyperlinkButton控件等。
  • 文本编辑控件:通过用于编辑或显示文本的控件,如TextBox、PasswordBox控件。
  • 选择控件:使用户可以从多个预设值的值集合中选择一项或多项,如CheckBox、RadioButton控件等。
  • 列表控件:用于展示列表集合或让用户从列表集合中选择。
  • 日期控件:可用于显示或供用户选择日期,包括Calendar、DatePicker控件。
  • 信息显示控件:用于显示少量的文字信息或报告当前操作的进度,如TextBlock、ProgressBar控件
  • 数据显示控件:以表格的形式显示数据集合,只有DataGrid

 

本节中我们先来看一下控件的一些重要公有属性与事件

  • 焦点相关:
    • GotFocus/LostFocus事件:

    大部分控件提供这两个事件,当用户进入或离开控件时会触发GotFoucs或LostFocus事件,不管是通过鼠标或是Tab键进入或离开控件。另外这两个事件是冒泡事件,即当控件遇到该事件而没有处理,事件会传递给其父控件,并且这种向上传递会持续直到被处理。

  • 鼠标相关:
    • MouseEnter:鼠标进入控件区域时触发
    • MouseLeave:鼠标离开控件区域时触发
    • MouseLeftButtonDown:在控件上按下鼠标左键时触发
    • MouseLeftButtonUp:在控件上松开鼠标左键时触发
    • MouseMove:鼠标在控件上移动时触发该事件

    另外有两个相关的方法:captureMouse和releaseMouse方法,captureMouse方法可以让鼠标事件总是传递到某个控件上,而不管当前是不是符合鼠标在控件范围内等条件。releaseMouse则用来取消控件对事件的锁定。

  • 键盘相关:

    KeyDown/KeyUp事件:除TextBox控件支持全键盘输入外,其它大部分控件提供了这两个事件来得到键盘的输入。KeyDown事件会在一个拥有焦点,且在其上面按下某个键的控件上触发。通过KeyDown事件中传入的KeyEventArgs类型参数中的Key类型的对象与platformKeyCode属性等可以得到按下键的详细信息。另外Keyboard.Modifiers属性返回一个组合键值,用来判断是否按下Alt,Ctrl,Shift或Win键。

 

从下篇文章开始依次介绍WPF/Silverlight中的原生控件。

 

本文完

 

参考:

《WPF揭秘》

转载于:https://www.cnblogs.com/lsxqw2004/archive/2012/02/27/4618309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值