DataTemplate应用
在WPF中,决定数据外观的是DataTemplate,即DataTemplate是数据内容的表现形式,一条数据显示成什么样子,是简单的文本还是直观的图形,就是由DataTemplate决定的。
下面通过设计ListBox及ComboBox控件的DataTemplate,把单调的数据显示成直观的柱状图。
<Window x:Class="DataTemplateDemo.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="153" Width="300">
<Window.Resources>
<DataTemplate x:Key="MyItem">
<StackPanel Orientation="Horizontal">
<Grid>
<Rectangle Stroke="Yellow" Fill="Orange" Width="{Binding Price}"></Rectangle>
<TextBlock Text="{Binding Year}"></TextBlock>
</Grid>
<TextBlock Text="{Binding Price}"></TextBlock>
</StackPanel>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ListBox ItemTemplate="{StaticResource MyItem}" x:Name="listBox1"></ListBox>
<ComboBox ItemTemplate="{StaticResource MyItem}" x:Name="comboBox1"></ComboBox>
</StackPanel>
</Window>
后台代码:
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
List<Unit> units = new List<Unit>();
Unit unit1 = new Unit() { Year = "2001", Price=100 };
Unit unit2 = new Unit() { Year = "2002", Price = 120 };
Unit unit3 = new Unit() { Year = "2003", Price = 140 };
Unit unit4 = new Unit() { Year = "2004", Price = 160 };
Unit unit5 = new Unit() { Year = "2005", Price = 180 };
units.Add(unit1);
units.Add(unit2);
units.Add(unit3);
units.Add(unit4);
units.Add(unit5);
listBox1.ItemsSource = units;
comboBox1.ItemsSource = units;
}
}
class Unit
{
public string Year { get; set; }
public int Price { get; set; }
}
效果如下图:
也可以把DataTemplate作用在某个数据类型上,方法是设置DataTemplate的DataType属性。上面的例子也可以通过这种方式实现:
<Window x:Class="DataTemplateDemo.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataTemplateDemo"
xmlns:c="clr-namespace:System.Collections;assembly=mscorlib"
Title="Window3" Height="153" Width="300">
<Window.Resources>
<DataTemplate DataType="{x:Type local:MyUnit}">
<StackPanel Orientation="Horizontal">
<Grid>
<Rectangle Stroke="Yellow" Fill="Orange" Width="{Binding Price}"></Rectangle>
<TextBlock Text="{Binding Year}"></TextBlock>
</Grid>
<TextBlock Text="{Binding Price}"></TextBlock>
</StackPanel>
</DataTemplate>
<c:ArrayList x:Key="ds">
<local:MyUnit Year = "2001" Price="100"/>
<local:MyUnit Year = "2002" Price="120"/>
<local:MyUnit Year = "2003" Price="140"/>
<local:MyUnit Year = "2004" Price="160"/>
<local:MyUnit Year = "2005" Price="180"/>
</c:ArrayList>
</Window.Resources>
<StackPanel>
<ListBox x:Name="listBox1" ItemsSource="{StaticResource ds}"></ListBox>
<ComboBox x:Name="comboBox1" ItemsSource="{StaticResource ds}"></ComboBox>
</StackPanel>
</Window>
后台代码:
public class MyUnit
{
public string Year { get; set; }
public int Price { get; set; }
}
备注:本例来源于刘铁锰先生的《深入浅出WPF》。
DataTemplate应用的更多相关文章
- wpf ListView DataTemplate方式的鼠标悬停和选中更改背景色
今天使用wpf技术弄一个ListView的时候,由于需求需要,需要ListView显示不同的数据模板,很自然的使用了DataTemplate方式来定义多个数据模板,并在ListView中使用ItemT ...
- [WPF系列]-数据邦定之DataTemplate 对 ItemsControl 进行样式和模板处理
引言 即使 ItemsControl 不是 DataTemplate 所用于的唯一控件类型,将 ItemsControl 绑定到集合仍然很常见. 在 DataTemplate 中有哪些内容一节中, ...
- [WPF系列]-数据邦定之DataTemplate 对分层数据的支持
到目前为止,我们仅讨论如何绑定和显示单个集合. 某些时候,您要绑定的集合包含其他集合. HierarchicalDataTemplate 类专用于 HeaderedItemsControl 类型以显示 ...
- [WPF系列]-数据邦定之DataTemplate 使用 DataTrigger 来应用属性值
使用 DataTrigger 来应用属性值 当前表示不会告诉我们某个 Task 是家庭任务还是办公室任务.记住 Task 对象拥有类型为 TaskType 的 TaskType 属性,该类型是一个枚举 ...
- [WPF系列]-数据邦定之DataTemplate 根据对象属性切换模板
引言 书接上回[WPF系列-数据邦定之DataTemplate],本篇介绍如何根据属性切换模板(DataTemplate) 切换模板的两种方式: 使用DataTemplateSelecto ...
- [WPF系列]-数据邦定之DataTemplate简介
引言 WPF 数据模板化模型为定义数据的表示形式提供了很大的灵活性.WPF 控件有支持自定义数据表示形式的内置功能.首先介绍下如何定义Datatemplate,然后再介绍其他数据模板化功能,例如根据自 ...
- WPF中UserControl和DataTemplate
最新更新: http://denghejun.github.io 前言 前言总是留给我说一些无关主题的言论,WPF作为全新Microsoft桌面或web应用程序显示技术框架, 从08年开始,一直到现在 ...
- toolkit:Accordion DataTemplate ListBox TextBlock Interaction.Triggers
困扰好几个小时的问题终于解决了,本人系菜鸟,使用MVVM设计模式,绑定DataTemplate的Command,需要使用 DataContent的资源,否则无法触发ICommand ClickChil ...
- WPF中ControlTemplate和DataTemplate的区别
下面代码很好的解释了它们之间的区别: <Window x:Class="WPFTestMe.Window12" xmlns="http://schemas.micr ...
随机推荐
- 【9-15】python学习笔记01
使用#开启行注释: 命令行:使用ctrl+d 退出
- 别老扯什么Hadoop了,你的数据根本不够大
本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过 ...
- [整理]Android开发(二)-Weather App
private class WeatherData{ private String _weatherDescription; private Integer _currentTemperature; ...
- freemarker初级教程(一)
序,freemarker是一个模板引擎 一.好处 MVC分离 易于扩展 分离可视化设计和应用程序逻辑 分离页面设计员和程序员. 处理XML和HTML都可以,可以从文本文件读取 二.
- WCF--验证码实现...
未开始待续... 未完待续...
- hadoop2.7.1安装
Hadoop2.7.1安装与配置 http://www.oschina.net/question/117352_247251 http://www.cnblogs.com/wayne1017/arch ...
- ubuntu安装ssh
为了解决远程连接ubuntu服务器控制端,方便操作.ubuntu不同的版本安装方式一致!首先在ubuntu服务器下安装SSH服务linux安装命令:sudo apt-get install opens ...
- PHP基础之 数组(二)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- superF12
superF12是开发内嵌ie内核的桌面客户端时的一个调试工具
- 怎么看网站是否开启CDN加速?测试网站全国访问速度方法详解
注意域名,动静分离的网站,只对静态文件的域名做了cdn 怎么看网站有没开启CDN? 要看一个网站是否开启CDN,方法很简单,只要在不同的地区ping网址就可以,比如在山东济南ping www.jb51 ...