zoukankan      html  css  js  c++  java
  • 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揭秘》

  • 相关阅读:
    配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法
    js 获取cookie
    jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
    既之前的基础,先写个简单的PHP 与数据库 的数据交流
    Web 后端--PHP 与数据库的交互
    MySQL 忘记密码怎么办?
    MySQL 继续-- Win7 安装及后续工作
    数据库初识--从MySQL 出发
    在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法
    电脑使用--快捷键等
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/4618309.html
Copyright © 2011-2022 走看看