一、什么是控件(Controls)

控件是指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能、控件创建过程包括设计、开发、调试(就是所谓的3Ds开发流程,即Design、Develop、Debug)工作, 然后是控件的使用。开发者应该掌握的三项主要内容是:属性、事件和方法。

所有的wpf控件都是继承自Control,根据用途上可以分为四种:内容控件(Content Controls)、条目控件(Items Controls)、文本控件(Text Controls)、范围控件(Range Controls)。

根据创建方式不不同,可以分为常用控件(一般指原生)、扩展控件(继承于原有控件,进行功能扩展,例如TextBox添加水印文字)、自定义控件(原来没有,根据功能创造一个控件,继承于Control或上面提到的四种)、用户控件(对基础控件--前面提到的功能单一的控件进行组合,形成一个具有封装性的功能集合)。

下面将对各种控件进行介绍。

二、控件类型介绍(根据用图)

1、内容控件

内容控件的最大的特征就是有一个Content属性,从前面的文章中,我们多多少少也知道Content接收的是一个Object类型,或许我们会立即想到莫非Button就是一个内容控件,确实,Button算是一个内容控件,凡是内容控件都继承自ContentControl,因为Content属性就是属于ContentControl。下面是Button的类图。

Button是继承自ButtonBase的,Button有个很有趣的地方就是ButtonBase中存在一个ClickMode属性,触发方式在ClickMode中以枚举的方式展现,Hover,Press和Release,默认也就是Press。

RepeatButton,在wpf中也是一个新增的控件,那么它的用途是什么呢?很简单,我们在看video的时候都有“快进”,“快退”,你懂的,首先我们看下RepeatButton中的定义,我们发现有一个Delay:作用就是按下时第一次触发Click的时间延迟,Interval:每次click发生的时间间隔,如果大家玩转了Timer控件都应该很清楚。

ToggleButton是CheckBox和RadioButton的基类,而且还存在IsThreeState属性,实际上我们最终的UI呈现的要么是CheckBox,要么是Radiobutton,要使第三种状态有效,我们只需要设置IsThreeState属性和Indeterminate事件即可。

2、条目控件

条目控件首先都是继承自ItemsControl,在ItemsControl中我们发现有两个比较有意思的属性,Items和ItemsSource。

Items:

Items属于ItemCollection的集合类型,所以每一个Item里面都可以放入一个Object类型对象,这里有意思的地方就是,如果我放入的是一个UI元素,那么很好,wpf会调用UI的OnRender方法将UI元素呈现,如果说是一个没有OnRender方法的元素,那该怎么办呢?wpf很智能,它会创建一个TextBlock,然后调用该对象的ToString()将字符串呈现在TextBlock上。

ItemsSource:

ItemsSource用于绑定数据源。

下面是它的类图:

MenuBase:从图中我们可以看出MenuBase的子类有两个Menu和ContextMenu。

Selector:既然是选择性的控件,那么难免少不了SelectedIndex或者SelectedItem。

TabControl:顾名思义就是选项卡,因为我们知道用ListBox是很占用空间的,而TabControl是具有更小的地方展现更多的内容,其实TabControl的每一个标签页都是一个TabItem。

ListView:这个控件我们在实际开发中经常用于数据绑定,它是继承自ListBox,ListBox默认只能显示一列,而ListView则可以用于显示多列,这里我提一个很有兴趣的玩意ObservableCollection<T>。它有什么用呢?其实ObservableCollection可以允许一个UI元素作为观察者对它进行监视,也就是说如果ObservableCollection中的元素有变动,作为观察的UI元素也会相应的改变,下面举个例子。

StatusBar:状态栏控件。

TreeView:我们知道TreeView是一个树形控件,TreeView的数据绑定需要注意。

3、文本控件

在wpf中,文本控件有三个,分别是:TextBox,RichTextBox和PasswordBox,类图如下:

通过这次学习和思维整理,更加清楚了控件的脉络,我将在剩下的章节里介绍余下的控件知识。

自定义控件系列博文链接:

WPF自定义控件(一)の控件分类
WPF自定义控件(二)の重写原生控件样式模板
WPF自定义控件(三)の扩展控件
WPF自定义控件(四)の自定义控件
WPF自定义控件(五)の用户控件

WPF自定义控件(一)の控件分类的更多相关文章

  1. WPF中Ribbon控件的使用

    这篇博客将分享如何在WPF程序中使用Ribbon控件.Ribbon可以很大的提高软件的便捷性. 上面截图使Outlook 2010的界面,在Home标签页中,将所属的Menu都平铺的布局,非常容易的可 ...

  2. 浅尝辄止WPF自定义用户控件(实现颜色调制器)

    主要利用用户控件实现一个自定义的颜色调制控件,实现一个小小的功能,具体实现界面如下. 首先自己新建一个wpf的用户控件类,我就放在我的wpf项目的一个文件夹下面,因为是一个很小的东西,所以就没有用mv ...

  3. WPF 调用WinForm控件

    WPF可以使用WindowsFormsHost控件做为容器去显示WinForm控件,类似的用法网上到处都是,就是拖一个WindowsFormsHost控件winHost1到WPF页面上,让后设置win ...

  4. InteropBitmap指定内存,绑定WPF的Imag控件时刷新问题。

    1.InteropBitmap指定内存,绑定WPF的Imag控件的Source属性 创建InteropBitmap的时候,像素的格式必须为PixelFormats.Bgr32, 如果不是的话在绑定到I ...

  5. 在WPF程序中将控件所呈现的内容保存成图像(转载)

    在WPF程序中将控件所呈现的内容保存成图像 转自:http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 有的时候,我们需要将控 ...

  6. 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件

    原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...

  7. 在WPF的WebBrowser控件中抑制脚本错误

    原文:在WPF的WebBrowser控件中抑制脚本错误 今天用WPF的WebBrowser控件的时候,发现其竟然没有ScriptErrorsSuppressed属性,导致其到处乱弹脚本错误的对话框,在 ...

  8. WPF 滚动文字控件MarqueeControl

    原文:WPF 滚动文字控件MarqueeControl WPF使用的滚动文字控件,支持上下左右滚动方式,支持设置滚动速度 XAML部分: <UserControl x:Class="U ...

  9. 深入探讨WPF的ListView控件

    接上一篇博客初步探讨WPF的ListView控件(涉及模板.查找子控件)  我们继续探讨ListView的用法      一.实现排序功能 需求是这样的:假如我们把学生的分数放入ListView,当我 ...

随机推荐

  1. This relative module was not found (转载)

    vue踩坑-This relative module was not found 在使用vue.js的日期选择插件 的时候,报错如下   This relative module was not fo ...

  2. oracle 汉字转化拼音函数

    FN_GETPY('中华人民共和国') -------------------------------------------------------------------------------- ...

  3. 10. Condition 控制线程通信

    1. 是什么 ? 2. 示例 package com.gf.demo09; import java.util.concurrent.locks.Condition; import java.util. ...

  4. Docker 系列一(概念原理和安装).

    一.概念原理 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间 ...

  5. Debug始于71年前

    摘要: 纪念Grace Hopper发现世界上第一个计算机BUG! 1947年9月9日,Grace Hopper的计算科学团队在哈佛的哈弗Mark II电脑运行程序时遇到一个技术故障.她在发生故障的M ...

  6. angular 设置年份选择下拉框,并默认今年

    <select ng-model="selectedYear" ng-change="yearChange(selectedYear)"> < ...

  7. Oracle11g: simple sql script examples

    ---https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8003.htm drop user geovin; drop ...

  8. POJ 2311 Cutting Game(二维SG+Multi-Nim)

    Cutting Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4798   Accepted: 1756 Desc ...

  9. Django之django模型层二多表操作

    一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...

  10. 如何用ABP框架快速完成项目(5) - 用ABP一个人快速完成项目(1) - 使用代码生成器

    用ABP一个人快速完成项目有如下要点: 站在巨人的肩膀上 - 使用代码生成器 站在巨人的肩膀上 - 使用成熟控件框架, 一个框架不够就上两个, 两个不够就上三个 通过微服务模式而不是盖楼式来避免难度升 ...