WPF控件设计的理念
程序的本质是“数据+算法”:用户输入原始数据,算法处理原始数据并得到结果数据。问题在于程序如何将结果数据显示给用户。同样一组数组,可以用不同的形式进行显示。可以用控制台的方式。也可以用图形化用户界面的方式。GUI的方便之处在于它对数据表达的直观性,有效避免了一堆抽象数据的痛苦,提高了工作效率,普及了计算机的操作。在WPF之前经历了一个漫长的发展阶段,有Windows API调用Windows底层绘图函数,使用C语言,最原始也是最基础的一种方式。在此基础上又发展了MFC,使用C++语法将原始的Win32 API函数封装成控件类。
在WPF时代使用了专门的UI设计语言并引入由数据驱动UI的理念。首先:之前几代GUI方法论只能使用编程语言进行UI设计,而WPF具有专门用于UI设计的XAML;其次:前几代在UI与数据的交互方面是由Windows消息到控件事件一脉相承,始终是把UI控件放在主导地位而把数据放在被动地位,用UI来驱动数据的改变,WPF在事件驱动的基础上引入了数据驱动界面的理念,让数据重归核心地位而让UI回归数据表达者的位置。
常用控件分类
① 布局控件:可以容纳多个控件或嵌套其他布局控件,用于在UI上组织和排列控件。Grid、StackPanel、DockPanel等控件属于此类。它们拥有共同的父类Panel。
② 内容控件:只能容纳一个其他控件或布局控件作为它的内容。Window、Button等控件属于此类,因为只能容纳一个控件作为其内容,所以经常需要借助布局控件来规划其内容。它们的共同父类是ContentControl。
③ 带标题内容控件:相当于一个内容控件,但可以加一个标题,标题部分亦可容纳一个控件或布局。GroupBox、TabItem等属于此类。它们的共同父类是HeaderContentControl。
④ 条目控件:可以显示一列数据,一般情况下这列数据的类型相同。此类控件包括ListBox、ComboBox等。它们的共同基类是ItemsControl。此类控件在显示集合类型数据方面功能非常强大。
⑤ 带标题条目控件:相当于一个条目控件加上一个标题显示区。TreeViewItem、MenuItem都属于此类控件。这些控件往往用于显示层级关系数据,结点显示在其Header区域,子级结点则显示在其条目区域。此类控件的共同基类是HeaderedItemsControl。
⑥ 特殊内容控件:如TextBox容纳字符串、TextBlock可以容纳可自由控制格式的文本、Image容纳图片类型数据...这类控件相对比较独立。
典型结构图