Windows Phone 7 LongListSelector控件实现分类列表和字母索引
在wp7手机里面的联系人列表和程序里面里面我们可以看到一个根据字母索引来定位联系人或者应用程序的控件,那么这个控件就是LongListSelector控件了。
LongListSelector是一种比ListBox更加强大的列表控件,你可以根据你列表的信息来分类排列,根据类别快速定位到你选中的类别的列表下,在数据量很大的情况下这种分类的优势很明显。LongListSelector可以自定义列表头,列表尾、类表头、列别尾等的样式和数据,可以实现各种个性化的列表样式和不同的数据的展现方式。Windows Phone 7手机的联系人列表就是基于LongListSelector控件设计的。LongListSelector控件的常用属性和常用事件分别如表12.6和表12.7所示。
表12.6 LongListSelector控件常用属性
名称 |
说明 |
DisplayAllGroups |
bool类型的属性,当值为true时,它显示所有的分组无论该组中是否有选项或者数据,默认值为false。 |
GroupFooterTemplate |
DataTemplate类型的属性,它是负责绑定每个组的底部的数据和样式的模板。 |
GroupHeaderTemplate |
DataTemplate类型的属性,它是负责绑定每个组的顶部的数据和样式的模板。 |
GroupItemsPanel |
ItemsPanelTemplate类型的属性,设置组的内部的Panel面板的内容。 |
GroupItemTemplate |
DataTemplate类型的属性,它是负责绑定每个组里面的元素的数据和样式的模板。 |
ItemTemplate |
DataTemplate类型的属性,它是负责绑定所有选项或者元素的数据和样式的模板。 |
ListFooterTemplate |
DataTemplate类型的属性,它是负责绑定整个List底部的数据和样式的模板。 |
ListHeaderTemplate |
DataTemplate类型的属性,它是负责绑定整个List顶部的数据和样式的模板。 |
SelectedItem |
获取或者设置选中的选项 |
ShowListFooter |
bool类型的属性,是否显示列脚,默认值为true。 |
ShowListHeader |
bool类型的属性,是否显示列头,默认值为true。 |
表12.7 LongListSelector控件常用事件
名称 |
说明 |
Link |
当查找的内容被找到时,触发的事件。 用法示例: selector.Link += new EventHandler<LinkUnlinkEventArgs>(selector_Link); void selector_Link(object sender, LinkUnlinkEventArgs e) {...} |
Unlink |
查找的内容没有被找到时,触发的事件。 用法示例: selector.Unlink += new EventHandler<LinkUnlinkEventArgs>(selector_Unlink); void selector_Unlink(object sender, LinkUnlinkEventArgs e) {... } |
SelectionChanged |
选择的选项改变时触发的事件。 用法示例: selector.SelectionChanged += new SelectionChangedEventHandler(selector_SelectionChanged); void selector_SelectionChanged(object sender, SelectionChangedEventArgs e) {... } |
ScrollingCompleted |
当列表滚动结束的时候触发的事件。 用法示例: selector.ScrollingCompleted += new EventHandler(selector_ScrollingCompleted); void selector_ScrollingCompleted(object sender, EventArgs e) {...} |
ScrollingStarted |
当列表滚动开始的时候触发的事件。 用法示例: selector.ScrollingStarted += new EventHandler(selector_ScrollingStarted); void selector_ScrollingStarted(object sender, EventArgs e){...} |
下面给出列表选择框的示例:演示如何使用LongListSelector控件进行列表信息分类。
代码清单12-6:列表选择框(源代码:第12章\Examples_12_6)
MainPage.xaml文件主要代码
<phone:PhoneApplicationPage.Resources><!—定义组头绑定模板--><DataTemplate x:Key="GroupHeader"><Border Background="{StaticResource PhoneAccentBrush}" Margin="{StaticResource PhoneTouchTargetOverhang}" Padding="{StaticResource PhoneTouchTargetOverhang}"><TextBlock Text="{Binding Key}"/></Border></DataTemplate><!—定义组选项绑定模板--><DataTemplate x:Key="GroupItem"><Border Background="{StaticResource PhoneAccentBrush}" Margin="{StaticResource PhoneTouchTargetOverhang}" Padding="{StaticResource PhoneTouchTargetOverhang}"><TextBlock Text="{Binding Key}" Style="{StaticResource PhoneTextLargeStyle}"/></Border></DataTemplate><!—定义列头绑定模板--><DataTemplate x:Key="ListHeader"><TextBlock Text="Header" Style="{StaticResource PhoneTextTitle1Style}"/></DataTemplate><!—定义列表选项绑定模板--><DataTemplate x:Key="ItemTmpl"><Grid><TextBlock Text="{Binding Title}"></TextBlock></Grid></DataTemplate></phone:PhoneApplicationPage.Resources>……<!--添加LongListSelector控件--><Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><toolkit:LongListSelector x:Name="LongList" Background="Transparent" ItemTemplate="{StaticResource ItemTmpl}"ListHeaderTemplate="{StaticResource ListHeader}" GroupHeaderTemplate="{StaticResource GroupHeader}"GroupItemTemplate="{StaticResource GroupItem}" ></toolkit:LongListSelector></Grid></Grid></phone:PhoneApplicationPage>
MainPage.xaml.cs文件代码
using System;using System.Collections.Generic;using System.Linq;using System.Windows;using System.Windows.Controls;using Microsoft.Phone.Controls;namespace LongListSelectorDemo{public partial class MainPage : PhoneApplicationPage{public MainPage(){InitializeComponent();//使用List<T>来初始化数据 List<Item> mainItem = new List<Item>();for (int i = 0; i < 10; i++){mainItem.Add(new Item() { Content = "A类别", Title = "测试A " + i.ToString() });mainItem.Add(new Item() { Content = "B类别", Title = "测试B" + i.ToString() });mainItem.Add(new Item() { Content = "C类别", Title = "测试C" + i.ToString() });}//使用Linq来查询List<Item>数据 按照Content来进行分组var selected = from c in mainItem group c by c.Content into n select new GroupingLayer<string, Item>(n);this.LongList.ItemsSource = selected;}//继承Linq的IGrouping接口 来存储分组的数据public class GroupingLayer<TKey, TElement> : IGrouping<TKey, TElement>{//分组数据private readonly IGrouping<TKey, TElement> grouping;//初始化public GroupingLayer(IGrouping<TKey, TElement> unit){grouping = unit;}//唯一的键值public TKey Key{get { return grouping.Key; }}//重载判断相等方法public override bool Equals(object obj){GroupingLayer<TKey, TElement> that = obj as GroupingLayer<TKey, TElement>;return (that != null) && (this.Key.Equals(that.Key));}public IEnumerator<TElement> GetEnumerator(){return grouping.GetEnumerator();}System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator(){return grouping.GetEnumerator();}}//List选项的类 Content表示类别 Title表示选项的标题public class Item{public string Title { get; set; }public string Content { get; set; }}}}
面再来看看第二例子,实现LongListSelector控件的字母索引。
Item.cs
namespace LongListSelectorDemo{/// <summary>/// 选项实体类/// </summary>public class Item{public string Name { get; set; }public string Content { get; set; }//获取名字的首个字符用来作为分组的依据public static string GetFirstNameKey(Item item){char key;key = char.ToLower(item.Name[0]);if (key < 'a' || key > 'z'){key = '#';}return key.ToString();}}}
ItemInGroup.cs
using System.Collections.Generic;namespace LongListSelectorDemo{/// <summary>/// 组集合/// </summary>public class ItemInGroup: List<Item>{public ItemInGroup(string category){Key = category;}//组的键public string Key { get; set; }//组是否有选项public bool HasItems { get { return Count > 0; } }}}
Items.cs
using System.Collections.Generic;namespace LongListSelectorDemo{/// <summary>/// 总数据集合/// </summary>public class Items: List<ItemInGroup>{//索引private static readonly string Groups = "#|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z";public Items(){//获取要绑定的数据源 List<Item> items = new List<Item>();items.Add(new Item { Name = "a测试", Content = "a内容" });items.Add(new Item { Name = "b测试", Content = "b内容" });items.Add(new Item { Name = "c测试", Content = "c内容" });items.Add(new Item { Name = "d测试", Content = "d内容" });items.Add(new Item { Name = "e测试", Content = "e内容" });items.Add(new Item { Name = "f测试", Content = "f内容" });items.Add(new Item { Name = "g测试", Content = "g内容" });//组的字典列表 Dictionary<string, ItemInGroup> groups = new Dictionary<string, ItemInGroup>();//初始化组列表,即用字母列表来分组foreach (string c in Groups.Split('|')){ItemInGroup group = new ItemInGroup(c.ToString());//添加组数据到集合this.Add(group);groups[c.ToString()] = group;}//初始化选项列表,即按照选项所属的组来放进它属于的组里面foreach (Item item in items){//添加选项数据到集合 groups[Item.GetFirstNameKey(item)].Add(item);}}}}
MainPage.xaml
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><toolkit:LongListSelector x:Name="longListSelector" Background="Transparent"Margin="0,-8,0,0"><toolkit:LongListSelector.GroupItemsPanel><ItemsPanelTemplate><toolkit:WrapPanel Orientation="Horizontal"/></ItemsPanelTemplate></toolkit:LongListSelector.GroupItemsPanel><toolkit:LongListSelector.GroupItemTemplate><DataTemplate><Border Background="Red" Width="99" Height="99" Margin="6" IsHitTestVisible="{Binding HasItems}"><TextBlock Text="{Binding Key}" FontFamily="{StaticResource PhoneFontFamilySemiBold}"FontSize="48"Margin="8,0,0,0"Foreground="White" VerticalAlignment="Bottom"/></Border></DataTemplate></toolkit:LongListSelector.GroupItemTemplate><toolkit:LongListSelector.GroupHeaderTemplate><DataTemplate><Border Background="Transparent" Margin="12,8,0,8"><Border Background="{StaticResource PhoneAccentBrush}" Padding="8,0,0,0" Width="62" Height="62" HorizontalAlignment="Left"><TextBlock Text="{Binding Key}" Foreground="#FFFFFF" FontSize="48"FontFamily="{StaticResource PhoneFontFamilySemiLight}"HorizontalAlignment="Left"VerticalAlignment="Bottom"/></Border></Border></DataTemplate></toolkit:LongListSelector.GroupHeaderTemplate><toolkit:LongListSelector.ItemTemplate><DataTemplate><Grid Margin="12,8,0,8"><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><StackPanel Grid.Column="1" VerticalAlignment="Top"><TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextLargeStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" Margin="12,-12,12,6"/><TextBlock Text="{Binding Content}" Style="{StaticResource PhoneTextNormalStyle}" TextWrapping="Wrap" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/></StackPanel></Grid></DataTemplate></toolkit:LongListSelector.ItemTemplate></toolkit:LongListSelector></Grid>
MainPage.xaml.cs
using Microsoft.Phone.Controls;namespace LongListSelectorDemo{public partial class MainPage : PhoneApplicationPage{// Constructorpublic MainPage(){InitializeComponent();longListSelector.ItemsSource = new Items();}}}
运行的效果如下:
转自:http://www.cnblogs.com/linzheng/archive/2012/03/24/2415958.html
Windows Phone 7 LongListSelector控件实现分类列表和字母索引相关推荐
- vc picture控件的分类总结(转载)
VC PICTURE控件的使用,如何加载背景图片 vc picture控件的分类总结: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定 ...
- 11. Windows应用程序常用控件
Windows应用程序常用控件 1 控件概述 1.1 控件的分类及作用 1.2 控件的命名规范 1.2 控件的相关操作 2.1 添加控件 2.2 对齐控件 2.3 锁定控件 2.4 删除控件 3 文本 ...
- Windows 8.1 新增控件之 DatePicker
Windows 8.1 新增控件之 DatePicker 原文:Windows 8.1 新增控件之 DatePicker 大年初一来介绍一个简单易用的DatePicker 控件,这个控件是新增的?印象 ...
- Windows 8.1 新增控件之 Hyperlink
Windows 8.1 新增控件之 Hyperlink 原文:Windows 8.1 新增控件之 Hyperlink Hyperlink 控件应该不用过多介绍大家肯定十分清楚其作用,它的功能就像HTM ...
- Windows phone7 动态添加控件
Windows phone7 动态添加控件 2011-03-29 3:48 using System; using System; using System.Collections.Generic; ...
- Windows Phone 7 button控件
System.Windows.Controls.Button button控件 一.button控件的各种样式的展示 可以通过 <phone:PhoneApplicationPage.Res ...
- [WP8.1UI控件编程]SemanticZoom控件实现分组列表
11.1.5 SemanticZoom实现分组列表 SemanticZoom控件可以让用户实现一种更加高级的列表,这种列表可以对列表的项目进行分组,同时这个SemanticZoom控件会提供两个具有相 ...
- 安卓学习笔记22:常用控件 - 可展开列表视图
文章目录 零.学习目标 一.可展开列表视图概述 二.可展开列表视图继承关系图 三.教学案例 - 选择四大名著人物 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[SelectCha ...
- Android图片控件,跟随列表(recyclerView)的上下滚动而同步平移。
一个用于放置在RecycleView中的图片控件,其主要功能是跟随列表的上下滚动而上下平移,使得呈现出一种图像相对列表静止的感觉. Overview ScrollingImageView 提供以下特性 ...
最新文章
- python array 语法_Python基本语法
- python traceback安装_Python错误:Traceback (most recent call last):感觉是软件出了问题
- Oracle数据删除后恢复
- 实时数据库领域中有关数据压缩的认识误区
- nyoj68三点顺序
- 网易云信AI音频最新研究成果获世界顶级学术会议 ICASSP 2022 认可
- 我珍藏的内容分享给大家
- 适合初学者的struts简单案例
- matlab fdtd,fdtd(fdtd中文教程)
- matlab 识别调试,有关matlab的人脸识别程序,但调试是不成功
- “经历”重于“技术”
- hdu 5178 pairs (线性探查问题)
- HTML Web教程
- 游戏契合度提示音_产品/市场契合度
- 股票如何看股票均线-5-10-20-30-60日均线
- 14Python爬虫---爬虫伪装浏览器
- 中国甜味剂粉市场趋势报告、技术动态创新及市场预测
- css3 text-shadow 浮雕、镂空、荧光效果
- 华为市场上架app签名Pepk工具 使用
- 解析高考新政策,来帮助孩子找到适合的专业:编程是未来世界人和机器交流交往的语文
热门文章
- php头尾分离,laravel怎么做模板的头尾分离
- java查看weblogic服务器_java判断服务器是那种,例如区分tomcat和weblogic | 学步园
- 石板切割问题c语言_广场地面铺装 仿古石 青石板 板岩 切割岩 冰裂纹压印混凝土地坪...
- elctron项目_electron项目结构介绍
- 【Java中级篇】Dom4j解析xml数据
- php四种标量,php的标量数据类型和复合数据类型,php四种标量
- 常见的技术类英文字母含义总结,Localhost、SDK、URL 等(持续更新中)
- Java中List、Map、Set三个接口,存取元素时,各有什么特点?
- poj 3352Road Construction(无向双连通分量的分解)
- 安装python3.6.1_如何安装python3.6.1/