WP8为LongListSelector根据Item内容选择ItemTemplate
2013-01-23 17:19
316 查看
我们知道Win8里要使ListView根据Item内容选择DataTemplate时,可以使用DataTemplateSelector类,但WP8里没有这个类可用。
所以,首先我们模仿实现一个DataTemplateSelector:
接着,我们继承DataTemplateSelector定义一个实际使用到的TemplateSelector:
最后,在xaml里实现TemplateSelector里的每个模版,并赋给LongListSelector的ItemTemplate:
这样,就能根据每个StockItem元素的DisplayType属性选择不同的DataTemplate了。
所以,首先我们模仿实现一个DataTemplateSelector:
public abstract class DataTemplateSelector : ContentControl { //根据newContent的属性,返回所需的DataTemplate public virtual DataTemplate SelectTemplate(object item, DependencyObject container) { return null; } protected override void OnContentChanged(object oldContent, object newContent) { base.OnContentChanged(oldContent, newContent); //根据newContent的属性,选择对应的DataTemplate ContentTemplate = SelectTemplate(newContent, this); } }
接着,我们继承DataTemplateSelector定义一个实际使用到的TemplateSelector:
public class StockTemplateSelector : DataTemplateSelector { public DataTemplate Normal { get; set; } public DataTemplate TS { get; set; } public DataTemplate KLine { get; set; } //根据newContent的属性,返回所需的DataTemplate public override DataTemplate SelectTemplate(object item, DependencyObject container) { StockItem stockItem = item as StockItem; if (stockItem != null) { if (stockItem.DisplayType == 1) return TS; else if (stockItem.DisplayType == 2) return KLine; else return Normal; } return base.SelectTemplate(item, container); } }
最后,在xaml里实现TemplateSelector里的每个模版,并赋给LongListSelector的ItemTemplate:
<phone:LongListSelector.ItemTemplate> <DataTemplate> <local:StockTemplateSelector Content="{Binding}"> <local:StockTemplateSelector.Normal> <DataTemplate> <Border Style="{StaticResource DZHBorderStyle1}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="2*"/> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center"> <TextBlock Text="{Binding StockName}" Foreground="Black" FontSize="20"/> <TextBlock Text="{Binding StockCode}" Foreground="Black" FontSize="20"/> </StackPanel> <TextBlock Grid.Column="1" Text="{Binding Latest}" Foreground="Black" FontSize="25" VerticalAlignment="Center" HorizontalAlignment="Center"/> <Button Grid.Column="2" Content="{Binding Percent}" Background="{Binding PercentColor}" FontSize="25" BorderBrush="Black" BorderThickness="1"/> </Grid> </Border> </DataTemplate> </local:StockTemplateSelector.Normal> <local:StockTemplateSelector.TS> <DataTemplate> <Border Style="{StaticResource DZHBorderStyle1}" Background="Green"> <Grid> <TextBlock Text="{Binding StockName}" Foreground="White" FontSize="25" VerticalAlignment="Center" HorizontalAlignment="Center"/> </Grid> </Border> </DataTemplate> </local:StockTemplateSelector.TS> <local:StockTemplateSelector.KLine> <DataTemplate> <Border Style="{StaticResource DZHBorderStyle1}" Background="Red"> <Grid> <TextBlock Text="{Binding StockName}" Foreground="White" FontSize="25" VerticalAlignment="Center" HorizontalAlignment="Center"/> </Grid> </Border> </DataTemplate> </local:StockTemplateSelector.KLine> </local:StockTemplateSelector> </DataTemplate> </phone:LongListSelector.ItemTemplate>
这样,就能根据每个StockItem元素的DisplayType属性选择不同的DataTemplate了。
相关文章推荐
- wp8中获得LongListSelector选中的TextBlock中的文本内容
- GridView的设置根据Item选择状态改变背景状态_Selector方式
- footer根据根据内容是否满屏选择是否居于底部
- vf表单中如何根据组合框内容而选择不同文件再根据不同文件改变文本框的内容
- WP8为LongListSelector添加类似ListBox的点击凹陷效果
- Wp8—LongListSelector控件使用
- 根据内容自动调整弹出窗口大小的JS解决方案 选择自 WeekZero 的 Blog
- 根据所选择的select选项实现内容的动态添加与组合
- JTable根据商品下拉框的选择,更新表格当前行的内容并指定焦点
- Android中Spanner获取选中内容和选中位置,根据位置选择对象
- 根据选择显示不同的内容
- [MVC] 自定义ActionSelector,根据参数选择Action
- 给好友选择性格标签的添加和删除(如:寂寞, 孤独,一个人。。。)根据cell里面的内容确定cell大小
- 根据select下拉框选择的值,向form表单添加所要显示的内容的方法
- 【WP8】简单介绍wp8中原生LongListSelector控件的用法
- WP8,最后,怎么在属性变化时重新选择ItemTemplate呢?
- Windows Phone LongListSelector的数据绑定应用,以及获取item的值
- 使视图可以根据选择的内容变化而变化
- Wp8—LongListSelector控件使用
- SQL技巧两则:选择一个表的字段插入另一个表,根据其它表的字段更新本表内容