WPF---数据模板(一)
一、场景模拟
假设我们现在有如下需求:
我们需要在ListBox中的每个Item中显示某个成员的姓名、年龄以及喜欢的颜色,点击Item的时候,会在右边显示详细信息,同时也想让ListBox的样式变得好看一些,比如带有绿色边框等。
为了实现以上需求,我们可以使用控件模板来修改ListBox的默认样式,使之变得生动有趣,使用数据模板来改变ListBoxItem的数据呈现形式。
二、Demo
为了改变ListBoxItem的外观,我们在资源里定义一个名字为listBoxItemTemplate的数据模板,模板中使用Binding将数据进行关联,然后为ListBox的ItemTemplate属性进行赋值。
当我们点击左面ListBoxItem的时候,为了能在右面显示详细信息,我们定义四个Label,绑定左侧选中的ListBoxItem。
为了绑定方便,我们为四个Label加个父容器StackPanel,并将它的DataContext属性绑定到选中的ListBoxItem上(四个Label的DataContext就会继承StackPanel的DataContext属性)。
具体代码以及运行截图参见以下:
1 using System.Collections.ObjectModel;
2 using System.Windows;
3
4 namespace DataTemplateDemo1
5 {
6 /// <summary>
7 /// Interaction logic for MainWindow.xaml
8 /// </summary>
9
10 public partial class MainWindow : Window
11 {
12 private ObservableCollection<Student> observableCollection = new ObservableCollection<Student>();
13 public ObservableCollection<Student> ObservableCollection
14 {
15 get { return observableCollection; }
16 set { observableCollection = value; }
17 }
18 public MainWindow()
19 {
20 InitializeComponent();
21 this.DataContext = this;
22 observableCollection.Add(new Student() {Name = "Tom", Age= 16, FavorColor="Red",Hobby="Swim" });
23 observableCollection.Add(new Student() { Name = "Maty", Age = 18, FavorColor = "Green" ,Hobby="Football"});
24 observableCollection.Add(new Student() { Name = "Alice", Age = 19, FavorColor = "Yellow" ,Hobby="Running"});
25 }
26 }
27
28 public class Student
29 {
30 public int Age { get; set; }
31 public string Name { get; set; }
32 public string FavorColor { get; set; }
33 public string Hobby { get; set; }
34 }
35
36 }
1 <Window x:Class="DataTemplateDemo1.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:DataTemplateDemo1"
7 mc:Ignorable="d"
8 Title="DataTemplateDemo" Height="350" Width="525">
9 <Window.Resources>
10
11 <ControlTemplate x:Key="ListBoxControlTemplate" TargetType="ListBox">
12 <Grid>
13 <Border BorderBrush="Green" BorderThickness="1" CornerRadius="5" >
14 <Grid>
15 <ItemsPresenter TextBlock.Foreground="Green"></ItemsPresenter>
16 </Grid>
17 </Border>
18 </Grid>
19 </ControlTemplate>
20
21 <DataTemplate x:Key="listBoxItemTemplate">
22 <Grid Height="50">
23 <Grid.ColumnDefinitions>
24 <ColumnDefinition Width="150"/>
25 <ColumnDefinition Width="50"/>
26 </Grid.ColumnDefinitions>
27 <Grid.RowDefinitions>
28 <RowDefinition/>
29 <RowDefinition/>
30 </Grid.RowDefinitions>
31 <TextBlock Name="textbox1" Text="{Binding Name}" Grid.Row="0" Margin="5"/>
32 <TextBlock Name="textbox2" Text="{Binding Age}" Grid.Row="1" Margin="5"/>
33 <Rectangle Fill="{Binding FavorColor}" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Margin="3"></Rectangle>
34
35 </Grid>
36 </DataTemplate>
37 </Window.Resources>
38 <Grid>
39 <StackPanel Orientation="Horizontal">
40
41 <ListBox Margin="5" Name="stuList"
42 Template="{StaticResource ListBoxControlTemplate}"
43 ItemsSource="{Binding ObservableCollection}"
44 ItemTemplate="{StaticResource listBoxItemTemplate}">
45 </ListBox>
46 <StackPanel DataContext="{Binding Path=SelectedItem,ElementName=stuList}">
47 <Label Content="{Binding Name}"></Label>
48 <Label Content="{Binding Age}"></Label>
49 <Label Content="{Binding FavorColor}"></Label>
50 <Label Content="{Binding Hobby}"></Label>
51 </StackPanel>
52 </StackPanel>
53
54 </Grid>
55 </Window>

WPF---数据模板(一)的更多相关文章
- WPF数据模板和控件模板
WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...
- WPF数据模板样式选择器
在使用数据模板样式选择器时,不能设置ItemContainerStyle的属性值,如果设置了该值,那么数据模板样式选择器会失去作用. 在使用数据模板样式选择器时,首先要创建数据模板样式选择器对象,此对 ...
- WPF数据模板(7)
数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...
- WPF数据模板中绑定事件不触发问题
今天比较闲,做一个练手的项目,结果在xaml中写了一个用户的数据模板后,在其中的某个Canvas上绑定了一个鼠标左击的事件,结果调试的时候,无论怎么点击都不跳到断点那里,百思不得其解. 之后尝试不绑定 ...
- WPF数据模板的数据触发器的使用
<Window x:Class="CollectionBinding.MainWindow" xmlns="http://schemas.micros ...
- WPF 数据模板使用值转换器
<Window x:Class="CollectionBinding.MainWindow" xmlns="http://schemas.micros ...
- WPF 数据模板DataType属性的使用,不用指定ItemTemplate
<Window x:Class="CollectionBinding.MainWindow" xmlns="http://schemas.micros ...
- WPF 数据模板的使用
<Window x:Class="CollectionBinding.MainWindow" xmlns="http://schemas.micros ...
- WPF的ComboBox 数据模板自定义
WPF的ComboBox 有些时候不能满足用户需求,需要对数据内容和样式进行自定义,下面就简要介绍一下用数据模板(DataTemplate)的方式对ComboBox 内容进行定制: 原型设计如下: 步 ...
- WPF中的数据模板(DataTemplate)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html WPF中的数据模板(DataTemplate) ...
随机推荐
- WIN10家庭版 访问WINXP 共享打印机
WIN10家庭版 1.安装对应的打印机驱动 2.打开WIN10计算机---在地址栏中输入:\\计算机XP名称,显示对应的共享资源,直接选择即可.如果无法访问则进行如下第三步 3.设置过程 开始 -设置 ...
- 从sql2008导入表结构及数据到mysql
打开navicat for mysql连接mysqlcreate database lianxi刷新,双击lianxi,双击"表"点击右边的"导入向导"选择&q ...
- python -- 程序异常与调试(程序调试)
一.程序调试 A.使用assert语句检测程序代码中的错误. assert 表达式[, 参数] 如果表达式为True,则继续往下运行:如果为False,则抛出一个AssertionError异常,并且 ...
- python -- 面向对象编程(类、对象)
一.类 类是用来描述具有相同的属性和方法的对象的集合. 它定义了该集合中每个对象共同拥有的属性和方法. 类是一个独立的单位,它有一个类名,其内部包括成员变量和成员方法,分别用于描述对象的属性和行为. ...
- 微信小程序云开发-云开发环境配置工作
一.注册小程序 打开[微信开发者工具],点击界面上的[注册],进入注册微信小程序页面.(也可以直接进入微信小程序注册地址:https://mp.weixin.qq.com/进行注册) 进入[小程序注册 ...
- Docker简易安装教程
Docker介绍 Docker 是一种开源容器化技术,用于构建和容器化应用程序.Docker 使用客户端-服务器架构.Docker客户端与 Docker守护进程对话,后者负责构建.运行和分发 Dock ...
- SpringBoot之yaml语法及静态资源访问
配置文件-yaml 在spring Boot开发中推荐使用yaml来作为配置文件. 基本语法: key: value:kv之间有空格 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 ...
- 研究java ResultSet结果集
java的结果集,实现类D:\storage\respository\com\sinosoft\local\oracle\1.0\oracle-1.0.jar!\oracle\jdbc\driver\ ...
- labview系列-中级计算器开发
本例子通过对中级计算器的操练,实现对结构/字符串等基础知识的掌握和理解,为后续的编程工作提供基础. 计算器开发原理:通过按钮触发事件,再各个事件中编写相应加减乘除方法,并显示在结果中即可. 要点:临时 ...
- jquery版本更新后无live函数的处理.TypeError: $(...).live is not a function
jquery live函数语法 jquery版本更新, 发现一个问题: jq自带的live没有了.控制台下会有如下的提示:火狐: TypeError: $(...).live is not a fun ...