wpf表格控件Word文件下载.docx
《wpf表格控件Word文件下载.docx》由会员分享,可在线阅读,更多相关《wpf表格控件Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
何在不创建新控件的情况下使用这些功能来实现统一的自定义体验。
丰富内容。
很多标准wpF控件支持丰富内容。
例如,button的内容属性为object类型,因此从理论上讲,任何内容都可以显示在button上。
若要让按钮显示图像和文本,可以将图像和textblock添加到stackpanel中,然后将stackpanel分配给content属性。
由于这些控件可以显示wpF可视化元素和任意数据,因此,减少了创建新控件或修改现有控件来支持复杂可视化效果的需要。
样式。
style是表示控件属性的值的集合。
使用样式可创建所需控件外观和行为的可重用表示形式,而无需编写新控件。
例如,假设希望所有textblock控件都呈现字号为14的红色airal字体。
您可以创建一个样式作为资源,然后相应地设置适当的属性。
这样,添加到应用程序中的每个textblock都将具有相同的外观。
数据模板。
datatemplate可用于自定义数据在控件上的显示方式。
例如,datatemplate可用于指定数据在listbox中的显示方式。
有关这种情况的示例,请参见数据模板概述。
除了自定义数据外观之外,datatemplate还可以包含ui元素,这样大大增加了自定义ui的灵活性。
例如,使用datatemplate可以创建一个combobox,其中每一项都包含一个复选框。
控件模板wpF中的很多控件都使用controltemplate来定义控件的结构和外观,这样可将控件外观和控件功能分离开。
通过重新定义控件的controltemplate,可以彻底更改控件的外观。
例如,假设您希望控件看起来像一个交通信号灯。
此控件具有简单的用户界面和功能。
该控件有三个圆形,一次只能点亮其中的一个。
经过考虑之后,您可能意识到Radiobutton提供了一次只选中一项的功能,但是Radiobutton的默认外观完全不像交通信号灯上的灯。
由于Radiobutton使用控件模板来定义其外观,因此很容易重新定义controltemplate以符合该控件的要求,从而使用单选按钮来制作交通信号灯。
说明:
尽管Radiobutton可以使用datatemplate,但在本例中,只使用datatemplate还不够。
datatemplate定义控件内容的外观。
对于Radiobutton,指示Radiobutton是否选中的那个圆形右侧显示出来的全部都是该控件的内容。
在交通信号灯的示例中,单选按钮只需要成为可“点亮”的圆形。
由于交通信号灯的外观要求与Radiobutton的默认外观存在很大差异,因此,有必要重新定义controltemplate。
一般而言,datatemplate用于定义控件的内容(或数据),controltemplate用于定义控件的构成方式。
触发器。
trigger用于在不创建新控件的情况下动态更改控件的外观和行为。
例如,假设应用程序中有多个listbox控件,而您希望每个listbox中的项在选中时都显示为红色粗体。
您首先想到的可能是创建一个从listbox继承的类,然后重写
onselectionchanged方法,以更改选中项的外观,不过,更好的方法是向listboxitem的样式添加一个更改选中项外观的触发器。
触发器用于更改属性值或根据属性值执行操作。
eventtrigger用于在发生事件时执行操作。
一般而言,如果控件完全复制现有控件的功能,但您希望该控件具有不同的外观,则应先考虑是否可以使用本节中讨论的某些方法来更改现有控件的外观。
控件创作模型
通过丰富内容模型、样式、模板和触发器,最大程度地减少了创建新控件的需要。
但是,如果确实需要创建新控件,那么理解wpF中的不同控件创作模型就显得非常重要。
wpF提供三个用于创建控件的一般模型,每个模型都提供不同的功能集和灵活度。
这三个模型的基类分别为usercontrol、control和Frameworkelement。
从usercontrol派生
在wpF中创建控件的最简单方法是从usercontrol派生。
如果生成继承自usercontrol的控件,需要将现有组件添加到usercontrol,命名这些组件,然后在可扩展应用程序标
记语言(xaml)中引用事件处理程序。
执行这些操作之后,即可在代码中引用这些命名元素和定义事件处理程序。
此开发模型非常类似于用于wpF应用程序开发的模型。
如果生成正确,usercontrol可以利用丰富内容、样式和触发器的优点。
但是,如果控件继承自usercontrol,则使用该控件的用户将无法使用datatemplate或
controltemplate来自定义其外观。
因此,有必要从control类或其派生类(usercontrol除外)进行派生,以便创建支持模板的自定义控件。
从usercontrol派生的优点
如果符合以下所有情况,请考虑从usercontrol派生:
希望以类似于生成应用程序的方式生成控件。
控件仅由现有组件组成。
不需要支持复杂自定义项。
从control派生
从control类派生是大多数现有wpF控件使用的模型。
在创建继承自control类的控件时,可使用模板定义其外观。
通过这种方式,可以将运算逻辑从可视化表示形式中分离出来。
通过命令和绑定(而不是事件),也可确保分离ui和逻辑,尽可能避免引用
controltemplate中的元素。
如果控件的ui和逻辑正确分离,该控件的用户即可重新定义其controltemplate,从而自定义其外观。
尽管生成自定义control不像生成usercontrol那样简单,自定义control还是提供了最大的灵活性。
从control派生的优点
如果符合以下任一情况,请考虑从control派生,而不要使用usercontrol类:
希望控件外观能通过controltemplate进行自定义。
希望控件支持不同的主题。
从Frameworkelement派生
从usercontrol或control派生的控件依赖于组合现有元素。
很多情况下,这是一种可接受的解决方案,因为从Frameworkelement继承的任何对象都可以位于controltemplate中。
但是,某些时候,简单的元素组合不能满足控件的外观需要。
对于这些情况,使组件基于Frameworkelement才是正确的选择。
生成基于Frameworkelement的组件有两种标准方法:
直接呈现和自定义元素组合。
直接呈现涉及的操作包括:
重写Frameworkelement的onRender方法,并提供显式定义组件
视觉效果的drawingcontext操作。
此方法由image和border使用。
自定义元素组合涉及的操作包括使用Visual类型的对象组合组件的外观。
有关示例,请参见使用
drawingVisual对象。
track是wpF中使用自定义元素组合的控件示例。
在同一控件中,也可以混合使用直接呈现和自定义元素组合。
从Frameworkelement派生的优点
如果符合以下任一情况,请考虑从Frameworkelement派生:
希望对控件的外观进行精确控制,而不仅仅是简单的元素组合提供的效果。
想要通过定义自己的呈现逻辑来定义控件的外观。
想要以一种usercontrol和control之外的新颖方式组合现有元素。
控件创作基础知识
如前所述,wpF最强大的功能之一是,无需创建自定义控件即可实现远比设置控件的基本属性来更改其外观和行为更强的功能。
wpF属性系统和wpF事件系统使样式、数据绑定和触发器功能成为可能。
如果在控件中实现依赖项属性和路由事件,则无论使用什么模型创建自定义控件,自定义控件的用户都可以像对wpF随附的控件那样使用这些功能。
使用依赖项属性
当属性为依赖项属性时,可以进行下面的操作:
在样式中设置该属性。
将该属性绑定到数据源。
使用动态资源作为该属性的值。
动画处理该属性。
如果希望控件的属性支持以上任一功能,则应将该属性实现为依赖项属性。
下面的示例定义一个依赖项属性。
这段代码执行下面的操作:
将一个名为Valueproperty的dependencyproperty标识符定义为
publicstaticreadonly字段。
通过调用dependencyproperty..:
:
.Register向属性系统注册该属性名,以指定以下内容:
属性的名称。
属性的类型。
拥有该属性的类型。
属性的元数据。
元数据包含该属性的默认值、coerceValuecallback和
propertychangedcallback。
篇二:
[wpF]使用grid与gridsplitter排版布局
[wpF]使用grid与gridsplitter排版布局前言
在开发应用程序时,一个很重要的工作项目就是设计用户接口的排版布局。
wpF中所提供的grid控件,让开发人员拥有将版面分割为栏列交错表格区域的能力。
而开发人员在使用grid控件分割版面之后,还可以在版面中加入gridsplitter控件,用以在执行期间提供用户动态调整表格区域大小的功能。
本篇文章介绍使用grid控件与gridsplitter控件,来设计几个常见的基本排版布局,为自己留个纪录也希望能帮助到有需要的开发人员。
一上二下布局
上图是一个一上二下的布局样式,msdn网站采用这个布局样式来提供各种信息内容。
完成这个布局样式可以透过grid控件,将版面切割为2栏2列的表格,并且合并第0列中的两个栏。
加入gridsplitter控件:
*在第0
列、第0栏表格区域下方,附加一个定义为grid.columnspan="
2"
的gridsplitter控件,用以提供动态调整上下两列表格区域高度的功能。
*在第1列、第0栏表格区域右方,附加一个gridsplitter控件,用以提供动态调整下方左右两栏表格区域宽度的功能。
在完成加入这些grid控件、gridsplitter控件之后,记得将gridsplitter控件的背景颜色定义为透明色(background="
transparent"
),