项目中有要用到一个ListBox里面多个模板的地方.查了查资料,还真有实现的方法.给出代码:

ps:因为是测试,所以就没有注意命名什么的,大家请原谅

1:MultiTemplatedListBox

 继承自ListBox,在PrepareContainerForItemOverride阶段检查数据,以决定选用哪一个模板

 1  public class MultiTemplatedListBox : ListBox 2     { 3         public DataTemplate ListItemTemplate1 { get; set; } 4         public DataTemplate ListItemTemplate2 { get; set; } 5  6         public MultiTemplatedListBox() : base() { } 7  8         DataTemplate SelectTemplate(MultiTemplatedListBoxData data) 9         {10             if (data.TemplateOrder == 1)11                 return ListItemTemplate1;12             else13                 return ListItemTemplate2;14         }15 16         protected override void PrepareContainerForItemOverride(DependencyObject element, object item)17         {18             base.PrepareContainerForItemOverride(element, item);19             ListBoxItem listBoxItem = element as ListBoxItem;20 21             if (listBoxItem != null)22             {23                 listBoxItem.ContentTemplate = SelectTemplate((MultiTemplatedListBoxData)item);24             }25         }26     }

2: MultiTemplatedListBoxData  用以决定选用模板的基类

1  public class MultiTemplatedListBoxData2     {3         public int TemplateOrder { get; set; }4         public MultiTemplatedListBoxData()5         {6             TemplateOrder = 1;7         }8     }

3:测试页面XAML

  <lc:MultiTemplatedListBox x:Name="Test"><lc:MultiTemplatedListBox.ListItemTemplate1><DataTemplate><Grid Background="Red"><TextBlock Text="{Binding Name1}"></TextBlock></Grid></DataTemplate></lc:MultiTemplatedListBox.ListItemTemplate1><lc:MultiTemplatedListBox.ListItemTemplate2><DataTemplate><Grid Background="Blue"><TextBlock Text="{Binding Name2}"></TextBlock></Grid></DataTemplate></lc:MultiTemplatedListBox.ListItemTemplate2></lc:MultiTemplatedListBox>

4:测试代码

 1  public partial class AATest: PhoneApplicationPage 2     { 3         public AATest() 4         { 5             InitializeComponent(); 6             List<MultiTemplatedListBoxData> aa = new List<MultiTemplatedListBoxData>(); 7             for (int i = 0; i < 10; i++) 8             { 9                 if (i % 2 == 0)10                     aa.Add(new Test1() { TemplateOrder = 1, Name1 = i.ToString() + " Name1!!!" });11                 else12                     aa.Add(new Test2() { TemplateOrder = 2, Name2 = i.ToString() + " Name2!!!" });13             }14             this.Test.ItemsSource = aa;15         }16     }17 18     public class Test1 : MultiTemplatedListBoxData19     {20         public string Name1 { get; set; }21     }22 23     public class Test2 : MultiTemplatedListBoxData24     {25         public string Name2 { get; set; }26     }

测试结果如下:

转载于:https://www.cnblogs.com/thilong/archive/2012/02/01/2334921.html

windows phone 中ListBox采用多模板相关推荐

  1. Windows Phone中使用Local DataBase与ISolateStorage—在MVVM模式下(—)

    像我们知道的一样,Windows Phone支持ISolateStorage,Mango中还新增了使用Linq的SQL CE作为本地数据库.下面我们就用MVVMLight来模拟个消息发送和查看消息历史 ...

  2. Windows系统中如何释放C盘空间

    Windows系统中如何释放C盘空间 1.打开"我的电脑"-"工具"-"文件夹选项"-"查看"-在"显示所有文 ...

  3. Windows系统中哪些文件夹可以删除

    Windows系统中哪些文件夹可以删除 windows文件夹中的哪些文件可以删除 经过以下的设置后,你的系统会更加清爽.简洁.高效! 1.打开"我的电脑"-"工具&quo ...

  4. 校内实验六,Windows系统中基于用户名密码的身份认证

    Windows系统中基于用户名密码的身份认证 一.实验目的 二.实验环境及原理 三.实验内容 1 检查和删除不必要的账户 2 禁用guest用户. 3 设置帐户/密码登录身份认证 4 匿名Admini ...

  5. 在windows系统中使用Ceres非线性优化库:(一)安装Ceres库

    (一)安装Ceres库                         1.用vcpkg安装Ceres库                 1.1.安装vcpkg 1.2.安装Ceres 1.3.配置C ...

  6. access ribbon 编程_基于Windows 7中的 Ribbon开发技术应用

    Windows 7的画图工具采用了微软所称的Scenic Ribbon 界面,这种界面起初是在Office 2007中出现的,也在WordPad出现过.虽然很多用户还在抱怨 "不习惯Ribb ...

  7. 如何在 Windows 7 中使用多线程加快文件复制[转]

    为什么没办法在 Windows 7 下加快 Windows 7 中文件复制/传输功能呢?可以用 robocopy 实现多线程文件复制实现. 经常进行文件管理操作的朋友们,提到复制/粘贴操作,想必很多人 ...

  8. Windows系统中文件解说

    Documents and Settings是什么文件? 答案: 是系统用户设置文件夹,包括各个用户的文档.收藏夹.上网浏览信息.配置文件等. 补:这里面的东西不要随便删除,这保存着所有用户的文档和账 ...

  9. 在 Windows 10 中开启移动 WLAN 热点

    本文将介绍如何在 Windows 10 中开启移动 Wi-Fi 热点. This post is written in multiple languages. Please select yours: ...

最新文章

  1. Elasticsearch-PHP实战操作
  2. 开发日记-20190803 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 19
  3. 【Python】生成器有啥用?
  4. 计算未来轻沙龙 | 顶会论文相继放榜,NLP领域有哪些最新进展?
  5. 服务器图片(绝对地址) 客户端显示问题
  6. [HBase_3] HBase 命令
  7. jQuery 效果 – 动画
  8. 麦咖啡Agent安装完后不合图标和不马上在EPO服务器上显示客户端的问题
  9. Python代码调试之异常回溯
  10. 对application/x-www-form-urlencoded、multipart/form-data和text/plain的认识
  11. siteweaver android动易客户端,动易SiteWeaver内容管理系统WAP2.0适配程序
  12. linux离线安装caddy,GitHub - scriptsboy/aria2: LACY:Linux一键安装Aria2 + Caddy + YAAW实现离线下载、在线播放。...
  13. 日语格助词全部学习笔记
  14. 如何提高你的个人价值
  15. Win11 的这 19 个新功能,你都用上了吗?
  16. Python编程学习教程:用python给自己DIY一款小说阅读器
  17. 计算机b级考试题型分值分布,大学英语四级考试题型和分值分配
  18. 【C++】定义一个求绝对值函数的模板,实现对不同数据类型的数求绝对值。
  19. 新华三杯复赛实验-虚拟局域网与IPv4 IGP路由部署解析
  20. 浅谈大型互联网企业入侵检测及防护策略

热门文章

  1. python自动测试g_python自动化测试报告(excel篇)
  2. byte 合并 java_java合并byte
  3. rootfs 制作ubuntu_制作ubuntu rootfs
  4. linux安半程序自动确认,利用system-config-kickstart实现半自动化安装
  5. js php 中文乱码怎么解决_php中文乱码怎么解决
  6. hibernate mysql 视图_转:hibernate映射视图的两种方式
  7. chromium关闭更新_你的Win10系统20H2了吗此乃Win10年度最靠谱的更新还有Win10优化大师助阵...
  8. c语言printf输出中文报错,printf输出中文后还带有数字是怎么回事?
  9. 树莓派配置php环境变量,树莓派PHP环境配置 解决页面空白
  10. 创建RMAN CATALOG