WPF 自定义 ItemsControl 控件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 19 20 21 23BorderBrush="{TemplateBinding BorderBrush}" 24BorderThickness="{TemplateBinding BorderThickness}" 25> 26 27 28 CornerRadius="5,5,0,0" Background="#10a8ab"> 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47Padding="3" 48BorderBrush="{TemplateBinding BorderBrush}" 49BorderThickness="{TemplateBinding BorderThickness}"> 50 51 52 53 54 55 56 57 58 Content="{TemplateBinding Title}"