zoukankan      html  css  js  c++  java
  • windows phone 中ListBox采用多模板

    项目中有要用到一个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 else
    13 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 MultiTemplatedListBoxData
    2 {
    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 else
    12 aa.Add(new Test2() { TemplateOrder = 2, Name2 = i.ToString() + " Name2!!!" });
    13 }
    14 this.Test.ItemsSource = aa;
    15 }
    16 }
    17
    18 public class Test1 : MultiTemplatedListBoxData
    19 {
    20 public string Name1 { get; set; }
    21 }
    22
    23 public class Test2 : MultiTemplatedListBoxData
    24 {
    25 public string Name2 { get; set; }
    26 }


    测试结果如下:

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/thilong/p/2334921.html
Copyright © 2011-2022 走看看