天天看点

8天入门wpf—— 第六天 细说控件

       这篇我们来大概的看一下wpf的各种神马控件,首先我们要知道所有的wpf控件都是继承自control,从用途上可以分为四种

         1:内容控件(content controls)

         2:条目控件(items controls)

         3:文本控件(text controls)

         4:范围控件(range controls)

一:内容控件

    内容控件的最大的特征就是有一个content属性,从前面的文章中,我们多多少少也知道content接收的是一个object类型,或许

我们会立即想到莫非button就是一个内容控件,确实,button算是一个内容控件,凡是内容控件都继承自contentcontrol,因为

content属性就是属于contentcontrol。

8天入门wpf—— 第六天 细说控件

1:butonbase

     要说button,我们需要从buttonbase说起,首先看一下类图。

8天入门wpf—— 第六天 细说控件

<1>button

  从图中我们可以看出,button是继承自buttonbase的,button有个很有趣的地方就是buttonbase中存在一个clickmode属性,

什么意思呢?也就是说click事件是用什么方式触发?触发方式在clickmode中以枚举的方式展现,hover,press和release,默认

也就是press。

8天入门wpf—— 第六天 细说控件

那么下面我用hover的形式来触发click事件,蛮有意思的,嘿嘿。

<2>repeatbutton

    首先这玩意我们在webform或者winform中貌似都没有见过,在wpf中也是一个新增的控件,那么它的用途是什么呢?很简单,我们在

看video的时候都有“快进”,“快退”,你懂的,首先我们看下repeatbutton中的定义,我们发现有一个

delay:作用就是按下时第一次触发click的时间延迟,

interval:每次click发生的时间间隔,如果大家玩转了timer控件都应该很清楚。

8天入门wpf—— 第六天 细说控件

<3>gridviewcolumnheader

   这个是与gridview控件一起搭配使用,放在后面一起讲。

<4>togglebutton

     从图中我们看到togglebutton是checkbox和radiobutton的基类,大家一看,这玩意我们早就会了,是的,大家都会,这里我就说

点有新鲜味道的东西,首先我们看下togglebutton的类定义。

8天入门wpf—— 第六天 细说控件

嘿嘿,兴趣点来了,怎么ischecked是可空类型?而且还存在王八isthreestate属性,难道还有第三种状态?是的,这是在html

中没有的,这里我们要知道,实际上我们最终的ui呈现的要么是checkbox,要么是radiobutton,要使第三种状态有效,我们只

需要设置isthreestate属性和indeterminate事件即可。

2: headeredcontentcontrol

    顾名思义,这是一个带有标题的内容控件,或许大家第一个反应过来的估计就是groupbox,是的,这玩意我们在html中用的太多了,

老规矩,我们还是看看类图。

8天入门wpf—— 第六天 细说控件

<1> expander

     首先得要申明,expander是wpf中新增的一个控件,在html中我们经常会看到一个伸缩控件,折叠起来只能看到标题,伸展开才能

看到内容,继续上代码说话。

<2> groupbox

       关于groupbox的使用,我想我也不用罗嗦了,太简单不过了。

<3>tabitem

       tabitem控件是与tabcontrol控件搭配使用,这个放到条目控件上说。

3:tooltip

    首先我们要知道tooltip也是继承自contentcontrol,在使用tooltip的时候我们要注意两点。

<1>: tooltip有点特殊,它不能独立的作为一个控件使用,而是与其他具体控件的tooltip联合使用。

<2>:tooltip提供了一个tooltipserivce类,可用于设计tooltip显示的相对位置,提示时间,嘿嘿,蛮有意思。

8天入门wpf—— 第六天 细说控件

4:scrollviewer

   在内容控件中很常用的一个莫过于scrollviewer,因为我们在界面布局时,永远都是“内容”大于界面,那么内容超出了我们该怎么办呢?

我们知道html中div具有裁剪功能,当内容超出,自动就有滚动条,那么在wpf中的scrollviewer也能够实现同样的功能。

8天入门wpf—— 第六天 细说控件

二:条目控件

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

8天入门wpf—— 第六天 细说控件

items:

从图中可以看出items属于itemcollection的集合类型,所以每一个item里面都可以放入一个object类型对象,这里有意思的地方就是,

如果我放入的是一个ui元素,那么很好,wpf会调用ui的onrender方法将ui元素呈现,如果说是一个没有onrender方法的元素,那该

怎么办呢?wpf很智能,它会创建一个textblock,然后调用该对象的tostring()将字符串呈现在textblock上。

itemssource:

从前面文章中我们也看到,itemssource常用于数据绑定,所以是一个非常实用的属性。

好,接下来我们看一下条目控件的类图

8天入门wpf—— 第六天 细说控件

从图中,我们大致可以看出这些控件可以分为两大类。

第一类:就是“条目容器”,比如menu。

第二类:就是“具体条目”,比如menuitem,但是在menuitem中又可以分为“带标题”和“不带标题”的两类具体条目”。

<1>menubase

    从图中我们可以看出menubase的子类有两个menu和contextmenu,在winform中我想大家肯定玩烂了,这里我也不多说了。

<2>selector

既然是选择性的控件,那么难免少不了selectedindex或者selecteditem,可以我们反应就是listbox,嘿嘿,关于listbox

和combobox这里就不多说了,我们具体的还是看下tabcontrol和listview,先还是看下selector类中的定义。

8天入门wpf—— 第六天 细说控件

tabcontrol:

  这个控件我们在html中用的还是比较多的,顾名思义就是选项卡,因为我们知道用listbox是很占用空间的,而tabcontrol是具有更小的

地方展现更多的内容,其实tabcontrol的每一个标签页都是一个tabitem。

8天入门wpf—— 第六天 细说控件

listview:

这个控件我们在实际开发中经常用于数据绑定,它是继承自listbox,listbox默认只能显示一列,而listview则可以用于显示多列,

这里我提一个很有兴趣的玩意observablecollection<t>。它有什么用呢?其实observablecollection可以允许一个ui元素作为观察者

对它进行监视,也就是说如果observablecollection中的元素有变动,作为观察的ui元素也会相应的改变,下面举个例子。

8天入门wpf—— 第六天 细说控件

                     <====  单击删除一行后  ====>

8天入门wpf—— 第六天 细说控件

<3>statusbar

关于状态栏控件,我想大家在winform中已经玩烂了,此处也就不多说了。

<4>treeview

我们知道treeview是一个树形控件,在html中如果想展现一个树形结构,我们只要将数据结构“深度优先”一下就ok了,关于

treeview的数据绑定,我的前一篇文章也说过,这里也就走马观花一下。

三:文本控件

在wpf中,文本控件有三个,分别是:textbox,richtextbox和passwordbox,先不管怎么样,上类图

8天入门wpf—— 第六天 细说控件

这几个控件,我想在winform中用的还是比较熟的,这里也就不罗嗦了。

四:范围控件

还是先上图:

8天入门wpf—— 第六天 细说控件

下面我们看看rangebase的类定义:

8天入门wpf—— 第六天 细说控件

图中可以看出rangebase是一个抽象类,定义了4个基本属性:largechange,smallchange,maximum,minimum,有了这些东西

我们才能方便快捷的使用范围控件。

<1> scrollbar

在先前的例子中,我们经常用一个控件来绑定scrollbar的value来形成联动,也就可以避免在后台的不必要代码,灵活方便。

<2>progressbar

  这个控件我们在实际应用上使用的还是比较多的,因为我们在完成一个任务时,可能需要等待数十秒或者数分钟,所以为了不让用户认为

系统处于假死状态,就要用一个等待进度条,这里有意思的地方就是,如果我们不知道任务何时完成或者说不在乎任务何时结束,我们可以

设一个无限等待的进度条,也就是说进度条上有一个“小矩形”在不停的滚动,我们要做的也就是设置isindeterminate=true即可。

8天入门wpf—— 第六天 细说控件