WPF数据模板(7)

数据模板经常使用在3种类型的控件, 下图形式:
html

  • 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate能够修改单元格的展现数据的方式。
  • 2.针对列表类型的控件, 例如树形控件,下拉列表,列表控件, 能够修改其中的ItemTemplate。
  • 3.修改ContentTemplate, 例UserControl控件的数据展示形式。

CellTemplate 模板

下面用一个例子, 来演示CellTemplate使用。例子实现一个DataGrid 展现一个普通的数据标, 同时新增一列CellTemplate添加两个自定义的按钮, 以下图所示。git

<DataGrid Name="gd" AutoGenerateColumns="False" CanUserSortColumns="True"  CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding UserName}" Width="100" Header="学生姓名"/>
                    <DataGridTextColumn Binding="{Binding ClassName}" Width="100" Header="班级名称"/>
                    <DataGridTextColumn Binding="{Binding Address}" Width="200" Header="地址"/>
                    <DataGridTemplateColumn Header="操做" Width="100" >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left">
                                    <Button Content="编辑"/>
                                    <Button Margin="8 0 0 0" Content="删除" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

完成操做, 而后后台进行该DataGrid进行绑定数据, 查询绑定后的效果。测试

List<Student> students = new List<Student>();
            students.Add(new Student() { UserName = "小王", ClassName = "高二三班", Address = "广州市" });
            students.Add(new Student() { UserName = "小李", ClassName = "高三六班", Address = "清远市" });
            students.Add(new Student() { UserName = "小张", ClassName = "高一一班", Address = "深圳市" });
            students.Add(new Student() { UserName = "小黑", ClassName = "高一三班", Address = "赣州市" });
            gd.ItemsSource = students;

最终的效果, 在数据的表格最后一列, 将会在一列中分别生成 两个普通按钮。
code

ItemTemplate

在列表的控件中, 经常会出现一些需求, 相似在下拉控件或树控件中添加一个 CheckBox选择框, 一个图标或图片, 这个时候, 咱们就能够利用自定义的DataTemplate 来实现这个功能,
接下来, 用一个示例来简单演示其功能, 一样, 该例子演示利用 ListBox 和 ComboBox来绑定一个 颜色代码列表, 同时展现其颜色。htm

<Window.Resources>
        <DataTemplate x:Key="comTemplate">
            <StackPanel Orientation="Horizontal" Margin="5,0">
                <Border Width="10" Height="10" Background="{Binding Code}"/>
                <TextBlock Text="{Binding Code}" Margin="5,0"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <ComboBox Name="cob" Width="120" Height="30" ItemTemplate="{StaticResource comTemplate}"/>
            <ListBox Name="lib" Width="120" Height="100" Margin="5,0"  ItemTemplate="{StaticResource comTemplate}"/>
        </StackPanel>
    </Grid>

上面的代码中, 定义了一个DataTemplate , 顶一个 长宽10px的border用于显示颜色代码, 绑定到Border背景颜色上, 定义了一个TextBlock用于展现颜色的代码。
下面为后台的绑定代码blog

List<Color> ColorList = new List<Color>();
            ColorList.Add(new Color() { Code = "#FF8C00" });
            ColorList.Add(new Color() { Code = "#FF7F50" });
            ColorList.Add(new Color() { Code = "#FF6EB4" });
            ColorList.Add(new Color() { Code = "#FF4500" });
            ColorList.Add(new Color() { Code = "#FF3030" });
            ColorList.Add(new Color() { Code = "#CD5B45" });

            cob.ItemsSource = ColorList;
            lib.ItemsSource = ColorList;

最终的测试效果以下所示:
图片

ItemsControl

定义ItemsControl 主要分两个步骤: 1.设置ItemsPanel容器, 用于容纳列表的最外层容器 2.定义子项的DataTemplateget

<ItemsControl Name="ic">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Width="50" Height="50" Content="{Binding Code}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

上面代码中, 定义了一个WarpPanel 容器为ItemControl的 最外层容器, 子项数据模板则绑定了一个按钮, 后台代码绑定几条数据, 查看其效果: 横排排列五个按钮, 内容分别是 1~6.it

List<Test> tests = new List<Test>();
            tests.Add(new Test() { Code = "1" });
            tests.Add(new Test() { Code = "2" });
            tests.Add(new Test() { Code = "3" });
            tests.Add(new Test() { Code = "4" });
            tests.Add(new Test() { Code = "6" });
            ic.ItemsSource = tests;

查看ItemsControl可视化树的结构组成?

剖析该结构, 能够看到, 紫色的1处, 为最外层的WrapPanel容器, 用于容纳排列按钮, 因为该示例设置了 Orientation="Horizontal" , 因此按钮则按水平排列, 再看 橘色 2处, 能够看见子项外层由一个内容呈现包括着, 内容为一个按钮, 因为绑定搞得数据是5个, 因此分别生成了内容为1~6的5个按钮。io

  • 说明: 那是否是觉得则ItemsPanel 放置任何元素都行? 很明显是不行的。 ItemsPanel的容器须要知足一个条件, 则是属于Panel族的元素, 不然会提示如下错误:

关于每种元素的分类能够看关于控件介绍的文章: http://www.javashuo.com/article/p-trevrovc-bs.html

ContentTemplate

长话短说, 这个东西用的太少了, 详细的能够搜索一下相关的使用资料。

本章测试代码下载

相关文章
相关标签/搜索