Window x:Class="模板选择器.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:模板选择器"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:MyDataTemplateSelector x:Key="tmpdog"></local:MyDataTemplateSelector>
<DataTemplate x:Key="dta">
<Border BorderThickness="2" BorderBrush="red" Background="GreenYellow">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Margin="10"></TextBlock>
<TextBlock Text="{Binding ID}" Margin="10"></TextBlock>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="dtb" DataType="ListBox">
<Border BorderThickness="1" BorderBrush="Blue" Background="LightBlue" Padding="5" >
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Margin="10"></TextBlock>
<TextBlock Text="{Binding ID}" Margin="10"></TextBlock>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<ListBox Name="listbox" ItemTemplateSelector="{StaticResource tmpdog}">
</ListBox>
<Button Grid.Row="1" Width="75" Height="23" Click="Button_Click">确定</Button>
</Grid>
</Window>

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Navigation;
using System.Windows.Shapes; namespace 模板选择器
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitData();
listbox.ItemsSource = list; }
public List<Student> list { get; set; }
public void InitData()
{
Random r = new Random();
list = new List<Student>();
for (int i = 0; i < 15; i++)
{
list.Add(new Student
{
Name = "dog" + i,
ID = r.Next(100)
});
}
} int i = 0;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (i%2==0)
{
listbox.SetResourceReference(ListBox.ItemTemplateProperty, "dta");
}
else
{
listbox.SetResourceReference(ListBox.ItemTemplateProperty, "dtb");
}
i++;
}
}
public class Student
{
public int ID
{
set;
get;
} public string Name
{
set;
get;
}
} public class MyDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var fe = container as FrameworkElement;
var obj = item as Student;
DataTemplate dt = null;
if (obj != null && fe != null)
{
if (obj.ID > 30)
{
dt = fe.FindResource("dta") as DataTemplate;
}
else
{
dt = fe.FindResource("dtb") as DataTemplate;
}
}
return dt;
}
}
}

 

WPF 动态更换模板的更多相关文章

  1. 继续聊WPF——动态数据模板

    我为啥称之为“动态数据模板”?先看看下面的截图,今天,我们就是要实现这种功能. 大概是这样的,我们定义的DataTemplate是通过触发器动态应用到 ComboBoxItem 上. 这个下拉列表控件 ...

  2. WPF 动态更换样式文件

    ApplySkinFromMenuItem("Style/BigImgStyle.xaml", "Style/FileListStyle.xaml"); //换 ...

  3. WPF通过DynamicResource实现给界面动态更换皮肤

    在我们的程序中有时候需要去实现动态更换皮肤的效果,从而完成一些个性化的设置,那么我们究竟怎样去实现动态换皮肤的效果呢?那么我们经常用到的就是设置不同的Style,并且在主程序的xaml文件中通过Dyn ...

  4. 《深入浅出WPF》笔记——模板篇

    原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...

  5. WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定

    原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定 WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 上面的 ...

  6. 动态更换应用Icon

    转:原理1--activity-alias 在AndroidMainifest中,有两个属性: // 决定应用程序最先启动的Activity android.intent.action.MAIN // ...

  7. java 读写word java 动态写入 模板文件

    import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import ja ...

  8. dede使用方法----更换模板

    刚开始接触dede的时候,自己一直在纠结怎么更换自己的模板啊.后面在秀站网上找到了一个比较好的更换模板的文字教程.下面就我自己做的进行写的笔记. 准备:一个你自己做好的静态版网站,我们假设它的名称是w ...

  9. WPF 详解模板

    在WPF中有三大模板 ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和 ItemsPanelTemplate是控件模 ...

随机推荐

  1. Python——List

    一.集成开发环境 集成开发环境(IDE,Integrated development Enviroment)是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面等工具.集 ...

  2. [原创]Java项目统一UTC时间方案

    Java项目统一UTC时间方案 作者:Gods_巨蚁 引言 近期团队的个别项目在进行框架升级后,部分时间值存在8小时误差,原因是错误的将数据库中的时间数据理解成了UTC时间(旧版本认为是北京时间) 考 ...

  3. axis调用webservice客户端开发

    第一步:wsdl2Java.bat文件编写 Axis_Lib表示依赖的jar包路径 Output_Path表示生成的class路径 Package包名 还需要手动更改 -p %Package%表示we ...

  4. 如何POST一个JSON格式的数据给java接口,获得返回数据

    /** * 模拟post进行url请求 * @param string $url * @param json $post_data */ public function request_post($u ...

  5. key things of ARC

    [key things of ARC] 1.使用原则. 2.__weak变量的使用问题 3.__autoreleasing的使用问题 4.block中易造成的强引用环问题. 5.栈变量被初始化为nil ...

  6. SqlServer数据导入到ORACLE

    ORACLE中执行 select * from SYSTEM."employ_epl"

  7. 有关Lucene的问题(4):影响Lucene对文档打分的四种方式

    原文出自:http://forfuture1978.iteye.com/blog/591804点击打开链接 在索引阶段设置Document Boost和Field Boost,存储在(.nrm)文件中 ...

  8. <c:out>标签中有一个escapeXml属性 如果为escapeXml="false",则将其中的html、xml解析出来。

    <td><c:out value="${s.name}" escapeXml="false"></c:out></td ...

  9. 打印vector内容

    <span style="font-size:14px;">#include <iostream> #include <vector> #inc ...

  10. 使对象可以像数组一样foreach循环,要求属性必须是私有的(写个类实现Iterator接口)

    <?php class Test implements Iterator { ,,,,); public function __construct() { } // 重置,将数组内部指针指向第一 ...