控件是指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能、控件创建过程包括设计、开发、调试(就是所谓的3Ds开发流程,即Design、Develop、Debug)工作, 然后是控件的使用。
设计控件是一项繁重的工作。自行开发控件与使用控件进行可视化程序开发存在着极大的不同,要求程序员精通面向对象程序设计。创建控件的最大意义在于封装重复的工作,其次是可以扩充现有控件的功能。
——转自百度百科
控件有很多,但是如果仔细去分析,也是有规律可循的,根据其作用,我们可以把控件分类,日常学习中我们打交道最多的控件无外乎6类:
布局控件:是可以容纳多个控件或者嵌套其他布局的控件,用于在UI上组织和 排列控件。Grid、StackPanel、DockPanel等控件都属此类,它们拥有共同的父类为Panel。
内容控件:只能容纳一个控件或者布局控件作为他的内容。Window、Button等控件属于此类,因为只能容纳一个控件作为其内容,所以经常借助布局控件来规划其内容。它们的共同父类ContentControl。
带标题内容控件:相当于一个内容控件,但是可以加一个标题(Header),标题部分可容纳一个控件或者布局,GroupBox、TabItem等是这类控件的典型代表。它们的共同父类是HeaderedContentControl。
条目控件:可以显示一列数据,一般情况下这列数据的类型是相同的。此类控 件包括ListBox、ComboBox等。它们的共同基类是ItemsControl。此类控件在 显示集合类型数据方面功能比较强大。
带标题条目控件:相当于一个条目控件加上一个标题显示区。TreeViewItem、 MenuItem都属于此类控件。这类控件往往用于显示层级关系数据,结点显示在其Header区域,子级结点则显示在其条目控件区域。此类控件的共同基类是 HeaderdeItemsControl。
特殊内容控件:比如TextBox容纳的是字符串、TextBlock可以容纳可自由控制格式的文本、Image容纳图片类型数据等。这类控件比较常用,但也相对比较独立。
可以把控件当成一个容器,控件的内容就是容器里要装的东西。控件的内容可以直接装数据,也可以装载控件。当控件的内容也是控件的时候就形成了控件的嵌套。把被嵌套在内的控件称为子级控件,这种控件嵌套在UI布局时尤为常见。因为允许控件相互嵌套,所以WPF的UI会呈现成一个树形结构。如果不考虑控件内部的组成结构,只观察由控件组成的“树”,那么这棵树为逻辑树(LoicalTree);
WPF控件往往是由更基本的控件构成的,即控件本身就是一种树状结构,如果连控件本身的树也考虑在内,则这棵比逻辑树更“繁茂”的树称 为可视元素树(Visual Tree)。
控件是内存中的对象,控件的内容也是内存中的对象。控件通过自己的某个属性引用着作为其内容的对象,这个属性称为内容属性(Content Property)。“内容属性”是个统称,具体到每种控件上,内容属性都有自己确切的名字——有的直接就叫Content,有的叫Child;有些控件的内容可以是集合,其内容属性有叫Items或Children的。控件的内容属性与XAML标签的内容存在一定的对应关系。有些控件的内容是一个集合,如StackPanel的内容属性是Children、ListBox的内容属性是Items,为这类控件添加内容时一样可以省略内容属性的标签