using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes; namespace TestLoadPic
{
/// <summary>
/// Interaction logic for TestTemplateSelectorWind.xaml
/// </summary>
public partial class TestTemplateSelectorWind : Window
{
public TestTemplateSelectorWind()
{
InitializeComponent();
LoadData();
lb.ItemsSource = list;
}
public List<Person> list { get; set; } public void LoadData()
{
Random r = new Random();
list = new List<Person>();
for (int i = 0; i < 10; i++)
{ int rnd=r.Next(100);
string sex="男";
if(rnd>50){
sex="女";
} list.Add(new Person
{
name = "张三" + i,
sex=sex,
age = rnd }); }
}
} public class Person
{
public string name { get; set; }
public int age { get; set; }
public string sex { get; set; } } public class MyDataTemplateSelector : DataTemplateSelector
{ public override DataTemplate SelectTemplate(object item, DependencyObject container)
{ var fe = container as FrameworkElement;
var obj = item as Person;
DataTemplate dt = null;
if (obj != null && fe != null)
{
if (obj.age > 50)
dt = fe.FindResource("one") as DataTemplate;
else
dt = fe.FindResource("two") as DataTemplate; }
return dt;
} } }

  

UI:

<Window x:Class="TestLoadPic.TestTemplateSelectorWind"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestLoadPic"
Title="TestTemplateSelectorWind" Height="448.495" Width="547.826">
<Window.Resources>
<local:MyDataTemplateSelector x:Key="mydt"></local:MyDataTemplateSelector>
<DataTemplate x:Key="one">
<Border BorderThickness="2" BorderBrush="red" Background="AliceBlue">
<StackPanel Orientation="Horizontal" Name="skp" >
<TextBlock Text="{Binding name}" Margin="10"></TextBlock>
<TextBlock Text="{Binding age}" Margin="10"></TextBlock>
<TextBlock Text="{Binding sex}" Margin="10"></TextBlock>
</StackPanel>
</Border>
<DataTemplate.Triggers> <!--男性背景色设置为绿色-->
<DataTrigger Value="男" Binding="{Binding Path=sex}">
<Setter TargetName="skp" Property="Background" Value="Green" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate x:Key="two" >
<Border BorderThickness="1" BorderBrush="Blue" Background="YellowGreen" Padding="5" >
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding name}" Margin="10"></TextBlock>
<TextBlock Text="{Binding age}" Margin="10"></TextBlock>
<TextBlock Text="{Binding sex}" Margin="10"></TextBlock>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Name="lb" ItemTemplateSelector="{StaticResource mydt}"> </ListBox>
</Grid>
</Window>

  

WPF/UWP 模板选择器 DataTemplateSelector的更多相关文章

  1. wpf 模板选择器DataTemplateSelector及动态绑定使用教程

    其实也说不上算是教程了,只是把自己学习的代码拿出来分享一下,同时方便以后遇到类似问题的时候翻一下.MSDN里如是说:通常,如果有多个 DataTemplate 可用于同一类型的对象,并且您希望根据每个 ...

  2. 【转】wpf 模板选择器DataTemplateSelector及动态绑定,DataTemplate.Triggers触发器的使用

    通常,如果有多个 DataTemplate 可用于同一类型的对象,并且您希望根据每个数据对象的属性提供自己的逻辑来选择要应用的 DataTemplate,则应创建 DataTemplateSelect ...

  3. wpf 模板选择器DataTemplateSelector及动态绑定,DataTemplate.Triggers触发器的使用

    通常,如果有多个 DataTemplate 可用于同一类型的对象,并且您希望根据每个数据对象的属性提供自己的逻辑来选择要应用的 DataTemplate,则应创建 DataTemplateSelect ...

  4. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

  5. ItemsControl绑定的数据模板显示不同样式:模板选择器

    总所周知,wpf提供了数据模板,列表控件可以绑定数据实现批量显示同类型数据.不过同个数据模板显示不同的样式怎么办?这时我们可以用模板选择器. 首先我们可以将数据绑定到首先定义资源样式 <Data ...

  6. 【广州.NET社区推荐】【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  7. 【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  8. 2019-11-29-win10-uwp-列表模板选择器

    原文:2019-11-29-win10-uwp-列表模板选择器 title author date CreateTime categories win10 uwp 列表模板选择器 lindexi 20 ...

  9. 2019-9-2-win10-uwp-列表模板选择器

    title author date CreateTime categories win10 uwp 列表模板选择器 lindexi 2019-09-02 12:57:38 +0800 2018-2-1 ...

随机推荐

  1. volatile关键字?MESI协议?指令重排?内存屏障?这都是啥玩意

    一.摘要 三级缓存,MESI缓存一致性协议,指令重排,内存屏障,JMM,volatile.单拿一个出来,想必大家对这些概念应该有一定了解.但是这些东西有什么必然的联系,或者他们之间究竟有什么前世今生想 ...

  2. js 判断图片和视频是否加载成功

    图片: 失败: // 方法 1:更换图片地址 $('img').error(function(){ $(this).attr('src', '加载失败.png'); }); // 方法 2:隐藏它 $ ...

  3. Oracle常用函数(3)

    1)to_char()函数,将日期转换为字符串表示 SQL> select to_char(sysdate,'yyyy"年"mm"月"dd"日& ...

  4. JDK1.8+API+中文文档+高清完整版(不要积分 免费拿)

    JDK1.8+API+中文文档+高清完整版+CHM帮助文档 链接: https://pan.baidu.com/s/1LbdWSZ4qFjWXdJ88bXkn5w 提取码: frew 希望能帮上大家的 ...

  5. App原生、混合、纯WEB开发模式的优劣分析

    什么叫做原生App? 什么是混合app? 什么是Web App开发? Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统 ...

  6. SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法

    SQL2005 还原数据库失败,提示如下: SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法 出现错误时操作步骤为:右击数据库--->任务- ...

  7. strcmp-sse2-unaligned.S: No such file or directory.

    __strcmp_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:3131 ../sysdeps/x8 ...

  8. Ubuntu下Cmake编译C++程序Helloworld

    1.首选新建工程目录 mkdir helloworld 2.新建文件目录 cd helloworld mkdir bin mkdir lib mkdir src mkdir include mkdir ...

  9. 跨域 (2) cors

    html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  10. web性能优化--服务器端(二)

    静态资源用CDN部署 添加Expires或者cache-control报文头 Gzip压缩传输文件 配置Etags 使用Get ajax请求 避免空图片src 尽早flush response 减少c ...