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. React结合AntD的upload组件写头像上传

    upload组件里面action就是调upload接口,获取图片url地址 setImg获取url,点击保存传到后台   action 上传头像方法 //上传头像 changeImg = info = ...

  2. 将div的内容生成清晰的PDF、高清PDF

    //需要引入html2canvas.js.jquery.js文件 html: <button type="button" class="btn btn-primar ...

  3. call apply bind sleep

    1.自己实现一个call 1)利用对象的方式的形式改变this指针 funcion add; add.call(temObj) 只需要 在temObj对象临时添加一个方法即可 Function.pro ...

  4. 2019-11-29-msbuild-项目文件常用判断条件

    title author date CreateTime categories msbuild 项目文件常用判断条件 lindexi 2019-11-29 08:36:48 +0800 2019-7- ...

  5. linux格式化磁盘命令

    linux格式化磁盘命令           linux mkfs         指令:mkfs 使用权限 : 超级使用者 使用方式 : mkfs [-V] [-t fstype] [fs-opti ...

  6. Verilog中的Timescale作用

    很多时候,我们拿到已有的东西理所当然的用了,其实,你真的对你所使用的东西了解吗? 再次犯下这样的错误,是因为在把代码从Altera 的CycloneV移植到Xilinx的Spartan6上,我遇到了非 ...

  7. Jam's balance HDU - 5616 (01背包基础题)

    Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...

  8. Codeforces 899 1-N两非空集合最小差 末尾最多9对数计算 pair/链表加优先队列最少次数清空

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  9. vue父组件调用子组件方法、父组件向子组件传值、子组件向父组件传值

      一.父组件调用子组件方法 父组件代码  parent.vue <template> <div> <button @click="parentFun" ...

  10. svn 服务器的搭建以及客户端的使用

    1.svn 服务器的搭建以及客户端的使用,安装见下面的博客 https://blog.csdn.net/zh123456zh789/article/details/80921179 说明:服务器只是用 ...