wpf表格控件

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

竭诚为您提供优质文档/双击可除

wpf表格控件

篇一:wpF控件开发之自定义控件

wpF控件开发之自定义控件

windowspresentationFoundation(wpF)控件模型的扩展性极大减少了创建新控件的需要。但在某些情况下,仍可能需要创建自定义控件。本主题讨论可最大限度减少在windowspresentationFoundation(wpF)中创建自定义控件以及其他控件创作模型的需要的功能。本主题还演示如何创建新控件。

ad:

windowspresentationFoundation(wpF)控件模型的扩展性极大减少了创建新控件的需要。但在某些情况下,仍可能需要创建自定义控件。本主题讨论可最大限度减少在windowspresentationFoundation(wpF)中创建自定义控件以及其他控件创作模型的需要的功能。本主题还演示如何创建新控件。

编写新控件的替代方法

以前,如果要通过现有控件获取自定义体验,您只能更改控件的标准属性,例如背景色、边框宽度和字号。如果希望在这些预定义参数的基础之上扩展控件的外观或行为,则需要创建新的控件,通常的方法是继承现有控件并重写负责绘制该控件的方法。虽然这仍是一种可选方法,但也可以利用wpF丰富内容模型、样式、模板和触发器来自定义现有的控件。下面的列表提供了一些示例,演示如

何在不创建新控件的情况下使用这些功能来实现统一的自定义体验。

丰富内容。很多标准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派生:希望以类似于生成应用程序的方式生成控件。

控件仅由现有组件组成。

不需要支持复杂自定义项。

相关文档
最新文档