WPF 动态更换模板
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 动态更换模板的更多相关文章
- 继续聊WPF——动态数据模板
我为啥称之为“动态数据模板”?先看看下面的截图,今天,我们就是要实现这种功能. 大概是这样的,我们定义的DataTemplate是通过触发器动态应用到 ComboBoxItem 上. 这个下拉列表控件 ...
- WPF 动态更换样式文件
ApplySkinFromMenuItem("Style/BigImgStyle.xaml", "Style/FileListStyle.xaml"); //换 ...
- WPF通过DynamicResource实现给界面动态更换皮肤
在我们的程序中有时候需要去实现动态更换皮肤的效果,从而完成一些个性化的设置,那么我们究竟怎样去实现动态换皮肤的效果呢?那么我们经常用到的就是设置不同的Style,并且在主程序的xaml文件中通过Dyn ...
- 《深入浅出WPF》笔记——模板篇
原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...
- WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定
原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定 WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 上面的 ...
- 动态更换应用Icon
转:原理1--activity-alias 在AndroidMainifest中,有两个属性: // 决定应用程序最先启动的Activity android.intent.action.MAIN // ...
- java 读写word java 动态写入 模板文件
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import ja ...
- dede使用方法----更换模板
刚开始接触dede的时候,自己一直在纠结怎么更换自己的模板啊.后面在秀站网上找到了一个比较好的更换模板的文字教程.下面就我自己做的进行写的笔记. 准备:一个你自己做好的静态版网站,我们假设它的名称是w ...
- WPF 详解模板
在WPF中有三大模板 ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和 ItemsPanelTemplate是控件模 ...
随机推荐
- 浅层神经网络 反向传播推导:MSE softmax
基础:逻辑回归 Logistic 回归模型的参数估计为什么不能采用最小二乘法? logistic回归模型的参数估计问题不能“方便地”定义“误差”或者“残差”. 对单个样本: 第i层的权重W[i]维度的 ...
- Postgresql VACUUM COPY等
1.VACUUM VACUUM回收dead tuples占用的存储空间. 在一般的PostgreSQL操作中,被update操作删除或废弃的元组不会从物理表中删除; 它们一直存在,直到执行VACUUM ...
- leetcode867
vector<vector<int>> transpose(vector<vector<int>>& A) { vector<vector ...
- Activex感知网页刷新关闭事件
原因 大多数ActiveX控件框架,例如MFC和ATL,在本地激活ActiveX控件时创建控件.基于性能上的考虑,直到控件第一次可见的时候,IE才本地激活ActiveX控件.这样包含ActiveX控件 ...
- latex 显示中文
中文支持需要cjk-latex,总得来说中文可以使用GB和GBK两种字体,GBK需要从windows下copy *.ttc或*.ttf, GB字体则在linux下就用. 先说支持GB的中文显示,安装以 ...
- angular与avalon对复杂对象的修改
angular的实现 <!doctype html> <html ng-app> <head> <script src="http://files. ...
- angularJS学习(三)——搭建学习环境
1.安装Node.js 和Testacular 1.1. 安装Node.js及配置部分,在另一篇博文:node.js的安装里面讲到了,地址是:http://www.cnblogs.com/tianxu ...
- Enumeration & Class & Structure
[Enumeration] 1.当一个枚举值类型已经确定后,可以使用shorter dot syntax来赋予其它值: 2.对一个枚举值switch的时候也可以使用short dot syntax: ...
- Spring总结八:jdbcTemplate的简单使用
简介: Srping毕竟是一站式框架,所以也有操作数据库的东西,那就是jdbcTemplate,介绍一下jdbcTemplate的简单使用. 除了要引入必要的包以外,还需要引入 spring-jdbc ...
- JS事件冒泡和事件捕获的详解
在学校,听老师讲解事件冒泡和事件捕获机制的时候跟听天书一样,只依稀记得IE使用的是事件冒泡,其他浏览器则是事件捕获.当时的我,把它当成IE浏览器兼容问题,所以没有深究(IE8以下版本的浏览器已基本退出 ...