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必须保留,因为在后台代码里面会用到

 

 

 

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

 

posted on 2025-04-11 14:38  张彦山  阅读(41)  评论(0)    收藏  举报