MSDN的解释:

提供一种根据数据对象和与该数据绑定的元素来选择数据模板 DataTemplate 的方法。

示例代码:

<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window2" Height="300" Width="300" Loaded="Window2_OnLoaded">
<Window.Resources>
<DataTemplate x:Key="T1">
<TextBlock Text="{Binding}" Background="DarkBlue" Foreground="White" Padding="10,0"></TextBlock>
</DataTemplate> <DataTemplate x:Key="T2">
<TextBlock Text="{Binding}" Background="DarkCyan" Foreground="White" Padding="10,0"></TextBlock>
</DataTemplate> <local:CTemplateSelector x:Key="TS"></local:CTemplateSelector>
</Window.Resources>
<Grid>
<ListBox x:Name="Lbox" ItemTemplateSelector="{StaticResource TS}"></ListBox>
</Grid>
</Window>
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
} private void Window2_OnLoaded(object sender, RoutedEventArgs e)
{
var source = new List<string>
{
"","","",""
}; this.Lbox.ItemsSource = source;
}
}
public class CTemplateSelector:DataTemplateSelector
{
public override DataTemplate SelectTemplate( object item, DependencyObject container )
{
if (item == null) throw new ArgumentNullException("item"); var element = container as FrameworkElement; if ( element != null )
{
var str = item.ToString();
int val; if (int.TryParse(str, out val))
{
if (val% == )
{
return element.FindResource("T1") as DataTemplate;
}
else
{
return element.FindResource( "T2" ) as DataTemplate;
}
}
} return base.SelectTemplate(item, container);
}
}

这个示例就是在一个 ListBox 控件中实现隔行换色的功能,当然也可以通过其他方法实现。

运行结果:

参考:

http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datatemplateselector%28v=vs.110%29.aspx

WPF 中关于 DataTemplateSelector 类的应用的更多相关文章

  1. WPF中的Application类。

    原文:WPF中的Application类. Application对象用的名称空间是system.windows 1.手动创建Application对象步骤. 1.1).把项目中的App.Xaml文件 ...

  2. WPF中的常用类汇总:

    1.FrameworkElement: WPF中大部分的控件都可以转化成FrameworkElement,利用FrameworkElement属性获取相应的值: 2.WPF获取当前工作区域的宽度和高度 ...

  3. WPF中的MatrixTransform

    原文:WPF中的MatrixTransform WPF中的MatrixTransform                                                         ...

  4. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  5. 正确理解WPF中的TemplatedParent

    (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和Logical ...

  6. 正确理解WPF中的TemplatedParent (转贴)

    http://blog.csdn.net/idebian/article/details/8761388 (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树 ...

  7. WPF中DataTemplateSelector的简单应用

    WPF中DataTemplateSelector的简单应用 DataTemplateSelector中文叫数据模板选择器,根据数据模型内的属性值选择不同的数据模板,多用于容器如listbox中,达到同 ...

  8. WPF中Image控件绑定到自定义类属性

    首先我们定义一个Student类,有ID,Name,Photo(保存图片路径). using System; using System.Collections.Generic; using Syste ...

  9. WPF中查找控件的扩展类

    在wpf中查找控件要用到VisualTreeHelper类,但这个类并没有按照名字查找控件的方法,于是搜索网络,整理出下面这个类,感觉用起来很是方便. 贴出来,供大家参考. /// <summa ...

随机推荐

  1. Android标题头滑动渐变,Titlebar滑动渐变,仿美团饿了么标题头渐变;

    原理就是滑动中改变透明度: 核心代码: rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public vo ...

  2. 由echarts想到的js中的时间类型

    在工作中使用echarts时,偶然发现折线图中对时间类型变量的用法: now前面的+号何解? now = new Date(+now + oneDay); 后来查阅资料,看到一篇博客,解释如下:这是对 ...

  3. 详解CSS3属性前缀(转)

    原文地址 CSS3的属性为什么要带前缀 使用过CSS3属性的同学都知道,CSS3属性都需要带各浏览器的前缀,甚至到现在,依然还有很多属性需要带前缀.这是为什么呢? 我的理解是,浏览器厂商以前就一直在实 ...

  4. python-运算符重载

    1. __item__ class X: def __init__(self, data=None): self.data = data or [] # 同样可用于 dict def __setite ...

  5. EXCEL workbook.saveas 函数详解

    本问所有资料来自于 Excel2003 VBA帮助文件,张荣整理,适用于DELPHI,VB的高级语言操作Excel用 ExcelApplication.WorkBook.SaveAs(filename ...

  6. Maven私服仓库类型

    1. 代理仓库(Proxy Repository) 顾名思义是代理第三方仓库的,如: maven-central nuget.org-proxy 版本策略(Version Policy): Relea ...

  7. javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Size' validating type 'java.util.Date'.

    开始是 javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Intege ...

  8. python大法好——修改文件、函数

    1.修改文件 补充上次没洗完的: 想要修改某个文件里一块地方,可以使用seek函数找到位置write函数修改. 是不是觉得这很简单? 但是如果你这样操作很可能会出现乱码. 因为由于字节数的不同,编码的 ...

  9. idea 未实现接口红线提示,重复代码波浪线提示,自动换行,控制台输出内容自动换行

    01,Could not autowire. No beans of 'UserMapper' type found 01.1,问题描述,通过反射动态实现的接口在调用时会出现以上提示,常见的如 ORM ...

  10. 白鹭引擎 - 遮罩( Rectangle )

    1: 矩形遮罩 class Main extends egret.DisplayObjectContainer { /** * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用 ...