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

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# 获取电脑硬件信息通用查询类[测试通过]

C#获取电脑硬件信息通用类[Computer]代码展示和分析&#xff0c;简介如下&#xff1a; 1.项目中添加System.Management引用。 2.添加类Computer&#xff0c;把下面代码全选&#xff0c;复制&#xff0c;粘贴。 3.使用方法new Computer().GetComputerName()。 代码 usingSyst…

基于ssm北关村基本办公管理系统的设计与实现论文

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对北关村基本办公信息管理的提升&…

C# 操作线程的通用类[测试通过]

进程管理就是对服务器性能的管理和协调&#xff0c;在程序的运行角度来看非常重要&#xff0c;也可以根据操作进程的手段&#xff0c;衍生很多实用和智能的功能&#xff0c;以下就是介绍一个自己写的进程通用操作类&#xff0c;功能如下&#xff1a; 1.把ProcessUtility类直接…

宽字符编码和解码通用类[CodeWidthChartUtility]

在做jsonp传递的时候遇到一个问题&#xff0c;当有特殊字符或中文的时候就会导致数据错误或者是乱码&#xff0c;刚开始有js的编码和解码和正则&#xff0c;都比较麻烦&#xff0c;现在找到了一种合适的解决方案&#xff0c;宽字符编码&#xff0c;js端会自动解析&#xff0c;能…

Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)

目录 1.cuda的安装 1.1 最简单的方法——分开安装驱动和cuda 1.2 更万能的方法——同时安装驱动和cuda 1.3 终极杀手锏 2.cudnn的安装 安装之前首先要确认你需要安装的cuda和cudnn的版本&#xff0c;假如你后续还需要安装tensorflow的话&#xff0c;请看我的另外一篇博客&am…

python做ui自动化_python+selenium做ui自动化测试用法必会

一、前言大家都知道&#xff0c;基于Web端的测试的基础框架是需要Selenium做主要支撑的&#xff0c;这里边给大家介绍下Web测试核心之基于 Python 的 SeleniumSelenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用…

c# 操作IIS应用程序池

直接代码&#xff1a; 代码 usingSystem.DirectoryServices; //添加引用 System.DirectoryServicestry{ DirectoryEntry appPool newDirectoryEntry("IIS://localhost/W3SVC/AppPools"); DirectoryEntry findPool appPool.Children.Find("DefaultAppPool&…

Android获取手机和系统版本等信息的代码

2019独角兽企业重金招聘Python工程师标准>>> String phoneInfo "Product: " android.os.Build.PRODUCT; phoneInfo ", CPU_ABI: " android.os.Build.CPU_ABI; phoneInfo ", TAGS: " android.os.Build.TAGS; phoneInfo &…

用hyperledger cello H3C分支创建单机模式区块链系统

本文介绍用hyperledger cello的0.9.0-h3c分支创建一套区块链系统的完整流程&#xff0c;希望对读者有所帮助。 环境准备工作&#xff1a;需要准备一台装有ubuntu 16.04的主机&#xff0c;内存需要大一些&#xff0c;建议8G以上。安装docker-ce和docker-compose。 接下来&…

Visual Studio 2010快捷键大全

为什么80%的码农都做不了架构师&#xff1f;>>> 【窗口快捷键】 CtrlW,W: 浏览器窗口 CtrlW,S: 解决方案管理器 CtrlW,C: 类视图 CtrlW,E: 错误列表 CtrlW,O: 输出视图 trlW,P: 属性窗口 CtrlW,T: 任务列表 CtrlW,X: 工具箱 CtrlW,B: 书签窗口 CtrlW,U: 文档大纲 C…

c# 查询本机日志

代码 StringBuilder sb newStringBuilder();EventLog mylog newEventLog();mylog.Log "Application"; //System[系统日志] | Application[应用日志] | Security[安全日志]EventLogEntryCollection myCollection mylog.Entries;for(inti 0; i <myCollection.Count…

Python安装FrankMocap实现3D人体姿态估计

FrankMocap 是港中文联合 Facebook AI 研究院提出的3D 人体姿态和形状估计算法。 不仅仅是估计人体的运动姿态&#xff0c;甚至连身体的形状&#xff0c;手部的动作都可以一起计算出来。 算法很强大&#xff0c;能够从单目视频同时估计出 3D 人体和手部运动&#xff0c;在一块 …

Windows任务管理 连接用户登录信息 通用类[C#版]

通用类名[ComputerLoginUserInfo.cs] 代码如下&#xff1a; 代码 usingSystem;//---引用usingSystem.Runtime.InteropServices;usingSystem.Text;///<summary>///Windows 任务管理器登录用户信息///author:Stone_W///date:2011.1.14///</summary>publicclassComput…

Hanoi(汉诺)塔问题

问题描述&#xff1a; Hanoi(汉诺)塔问题。古代有一个梵塔&#xff0c;塔内有3个座A,B,C&#xff0c;开始时A座有n个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。有一个老和尚想把这n个盘子&#xff0c;从A座移动到C座&#xff0c;但是每次只允许移…

实现Windows直接远程访问Ubuntu桌面和解决VNC连接Ubuntu桌面灰色的问题解决

Accept clipboard from viewersSend clipboard to viewersSend primary selection to viewers 本文主要是讲解如果理由VNC实现Windows远程访问Ubuntu 16.04(因为本文已经有点年头了&#xff0c;之前以16.04版本为例讲解&#xff0c;最新版18.04笔主也测试过是没有问题的)&#…

python自己做个定时器_python 创建一个自己的类计时器

前言&#xff1a;学习了python的类之后收获颇多&#xff0c;于是想利用类创建一个简单的计时器第一代版本首先要明确自己的timer想要实现的功能…先列一些简单的吧比如&#xff1a;开始计时的功能&#xff0c;停止计时的功能&#xff0c;有一些简单的提示语…还有一个问题&…

HttpWebRequest模拟POST提交防止中文乱码

测试通过&#xff0c;请求的为自己写的一般处理程序&#xff0c;代码如下&#xff1a; 代码 Encoding myEncoding Encoding.GetEncoding("gb2312");stringparam HttpUtility.UrlEncode("aa", myEncoding) ""HttpUtility.UrlEncode("值A&quo…

手把手带你玩转Tensorflow 物体检测 API (1)——运行实例

本文在学习《Tensorflow object detection API 搭建属于自己的物体识别模型&#xff08;1&#xff09;——环境搭建与测试》的基础上优化并总结&#xff0c;此博客链接&#xff1a;https://blog.csdn.net/dy_guox/article/details/79081499&#xff0c;感谢此博客作者。 0.前言…

html5 java 图片上传_java实现图片上传至服务器并显示,如何做?希望要具体的代码实现...

展开全部有两种方法一是用上传的组建jspSmartUpload的Request&#xff0c;还有一种不用组建&#xff0c;但在e69da5e6ba9062616964757a686964616f31333238653233form表单中不能加入ENCTYPE "multipart/form-data "我给你的案例吧建立后台数据库if exists (select * f…

CISCO的GLBP(网关负载均衡协议)

名词定义&#xff1a;活动虚拟网关AVG: 它的优先级最高&#xff0c;应答所有ARP请求&#xff0c;反回哪个MAC地址&#xff0c;取决于采用的负载均衡方式AVG还给GLBP组中的每台路由器分配虚拟MAC地址&#xff0c;最多每个组可以分到4个&#xff0c;组里的每台路由器都被称为活动…