WPF 自定义 ItemsControl 控件

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

该控件叫Summary, 主要是一些汇总信息的显示,有几个地方用,之前都是分散到各个XAML 文件里,不统一。

本人WPF新手,对XAML了解不多,做这个软件基本上都是用CM,界面布局用AvalonDock。由于缺乏相关经验,又没有一个能问得上的人指导,写这个控件费了我很长时间(啥时有空啥时动动)。

之前主要做一些功能方面的,没有心思美化界面,现在虽然还有很多功能没写,但是基本上够自己用了,放下心思来做一些界面上的东西,要不然何苦选择WPF?

先看一下图:

该CustomControl 由4部分组成:

大标题,小标题,值及Detail。

虽然细分这么多,但实质上还是一个列表类的控件,所以选择继承自ItemsControl.

做这个控件的时候,遇到了一些详细的问题不知道怎么解决,Google/Bing 都没有找到我要了解的,Baidu 更不用提了,漫天的转载,Copy.

1, 类似ComboBox 的DisplayMemberPath 如何弄?

既然都自定控件了,当然是想让它适用不同场景,不能局限于某一个实体类,最好是能像DisplayMemberPath ValueMemberPath 这样的属性。

这里,我定义了:

ItemTitlePathProperty 及ItemValuePathProperty 来处理。

2,有了上面两个依赖属性,但是还不足以处理更多的场景,最好是能有不同的Template 。这里我定义了:

TitleTemplate / ValueTemplate及DetailTemplate.

第一个问题,只需定义一个简单的DataTemplate ,然后用TemplateBinding 即可做到。但是要和第二个问题结合在一起,就牵扯到模板切换及数据切换的问题,因为第一问题所用的数据被指定为某实体类的某个属性,第二个问题的数据要指定为整个实体。

解决第一个问题,需要重写PrepareContainerForItemOverride 方法,第二个需要重写OnApplyTemplate

不多说了,怕误导大家,毕竟,我懂的不多,上代码,供参考:

模板文件:

1

xmlns="/winfx/2006/xaml/presentation"

2

xmlns:x="/winfx/2006/xaml"

3

xmlns:local="clr-namespace:AsNum.WPF.Controls"

4>

5

6

7

8

9

10

11

12

13

Foreground="White"/>

14

15

16

17

18

41

42