0604数据模板
1、数据模板DataTemplate

集合模板
有哪些容器控件可以用
<ItemsControl/> 底层一些
<ListView/>
<ListBox/>
<DataGrid/>
后面三个都是继承自ItemsControl,只要继承自ItemsControl都有些子项属性可以处理
<TabControl/>不常用
2、使用集合控件
1、创建数据模板

2、引入命名空间
3、定义数据数组集合x:Array
4、使用ItemControl


有多少子项就显示多少个
2、显示出真实数据
ItemTemplate
--DataTemplate
<ItemsControl ItemsSource="{StaticResource datas}"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid > <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Name}" FontSize="30" Foreground="Red"/> <TextBlock Grid.Column="1" Text="{Binding Gender}" FontSize="30" Foreground="Red"/> <TextBlock Grid.Column="2" Text="{Binding Age}" FontSize="30" Foreground="Red"/> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
显示效果

4、调整显示效果
ItemsPanelTemplate里面只能放一个容器,继承Panel的,放其他的会报错
1、StackPanel 默认自上而下
<ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel>
2、WrapPanel 从左向右排,可以折行

3、UniformGrid 均分

<UniformGrid Rows="1"/>

<UniformGrid Columns="1"/>

这个控件是没有滚动条的,ScrollViewer.VerticalScrollBarVisibility="Auto"不能显示滚动条
可以用
VirtualizingStackPanel不能显示的部分不加载,性能优化,但是力度有限
加了滚动条,还是会加载
ListView和ListBox默认容器就是带滚动条和虚拟加载VirtualizingStackPanel,可以实现不显示就不加载
ListView

ListBox

ItemsControl里面简单

一般还是用ListView处理,不需要滚动条
ItemControl可以分页,不用一次都加载出来
5、绑定动态加载子项
模板添加两个属性Left和Top,给每个子项设置
在数据模板里面绑定子项的Canvas.Left和Top并不会起作用,因为它并不是直接包含到Canvas而是外面又包了一层


内容占位符ContentPresenter
Canvas并不是Grid的直接父类
需要对ContentPresenter设置Left和Top属性

6、控件模板优先级,肯定是在数据模板之上的
同时定义了数据模版和控件模版,控件模版的优先级更高
有容器才会有内容
没有容器啥也没有
内容只是容器模板里面的一个占位符

ListViewItem可以设置控件模版

ContentPresenter占位符
同Button的Content

TabControl编辑副本的控件里面的占位符Name必须保留,因为在后台代码里面会用到

基本布局、触发器、视觉状态(自定义控件里面处理,需要写后台代码)
浙公网安备 33010602011771号