[源码下载]

与众不同 windows phone (34) - 8.0 新的控件: LongListSelector

作者:webabcd

介绍
与众不同 windows phone 8.0 之 新的控件

  • 新的控件 - LongListSelector

示例
演示 LongListSelector 控件的应用

1、提供数据
Controls/CityInfo.txt

=澳门=aomen
=阿巴嘎=abagaqi
=阿坝=aba
=阿城=acheng
=阿尔山=aershan
=阿合奇=aheqi
=阿克苏=akesu
=阿克陶=aketao
=阿拉尔=alaer
=阿拉山口=alashankou
=阿右旗=alashanyouqi
=阿左旗=alashanzuoqi
=阿勒泰=aletai
=阿里=ali
=阿鲁旗=aluqi
=阿荣旗=arongqi
=阿图什=atushi
=阿瓦提=awati
=安达=anda
=安定=anding
=安多=anduo
=安福=anfu
=安国=anguo
=安化=anhua
=安吉=anji
=安康=ankang

Controls/CityInfo.cs

namespace Demo.Controls
{
/// <summary>
/// city 信息实体类
/// </summary>
public class CityInfo
{
/// <summary>
/// city 标识
/// </summary>
public string CityId { get; set; }
/// <summary>
/// city 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// city 拼音
/// </summary>
public string Pinyin { get; set; } /// <summary>
/// 获取城市的拼音首字母
/// </summary>
public static string GetFirstPinyinKey(CityInfo cityInfo)
{
char indexLetter = char.ToUpper(cityInfo.Pinyin[]); if (indexLetter < 'A' || indexLetter > 'Z')
{
indexLetter = '#';
} return indexLetter.ToString();
}
}
}

Controls/CityInfoInGroup.cs

using System.Collections.Generic;

namespace Demo.Controls
{
/// <summary>
/// 为 LongListSelector 提供数据的实体类
/// </summary>
public class CityInfoInGroup : List<CityInfo>
{
public CityInfoInGroup(string indexLetter)
{
IndexLetter = indexLetter;
} // 某组数据的拼音首字母
public string IndexLetter { get; set; } public bool HasItems { get { return Count > ; } }
}
}

Controls/CityData.cs

using System;
using System.Collections.Generic;
using System.Windows.Resources;
using System.IO;
using System.Linq; namespace Demo.Controls
{
/// <summary>
/// 城市数据(为 LongListSelector 提供数据)
/// </summary>
public class CityData
{
// 按拼音首字母分组城市数据
private static readonly string _groupLetters = "#abcdefghijklmnopqrstuvwxyz"; private static List<CityInfoInGroup> _data;
private static List<CityInfo> _cities; /// <summary>
/// 获取全部城市数据 for LongListSelector
/// </summary>
public static List<CityInfoInGroup> GetData()
{
if (_data == null)
{
_data = new List<CityInfoInGroup>();
_cities = new List<CityInfo>(); Dictionary<string, CityInfoInGroup> groups = new Dictionary<string, CityInfoInGroup>(); foreach (char c in _groupLetters.ToUpper())
{
CityInfoInGroup group = new CityInfoInGroup(c.ToString());
_data.Add(group);
groups[c.ToString()] = group;
} StreamResourceInfo resource = App.GetResourceStream(new Uri("Controls/CityInfo.txt", UriKind.Relative));
StreamReader sr = new StreamReader(resource.Stream);
string line = sr.ReadLine();
while (line != null)
{
var ary = line.Split('=');
var cityInfo = new CityInfo { CityId = ary[], Name = ary[], Pinyin = ary[] };
_cities.Add(cityInfo);
groups[CityInfo.GetFirstPinyinKey(cityInfo)].Add(cityInfo); line = sr.ReadLine();
}
} return _data;
} /// <summary>
/// 获取包含指定关键字的城市数据 for LongListSelector
/// </summary>
public static List<CityInfoInGroup> GetData(string searchKey)
{
searchKey = searchKey.ToLower(); List<CityInfoInGroup> result = new List<CityInfoInGroup>();
List<CityInfoInGroup> data = GetData(); foreach (CityInfoInGroup ciig in data)
{
List<CityInfo> childData = ciig.Where(p => p.Name.Contains(searchKey) || p.Pinyin.Contains(searchKey)).ToList();
if (childData != null)
{
CityInfoInGroup resultCiig = new CityInfoInGroup(ciig.IndexLetter);
resultCiig.AddRange(childData); result.Add(resultCiig);
}
} return result;
}
}
}

2、使用数据
Controls/LongListSelectorDemo.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Controls.LongListSelectorDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True"> <phone:PhoneApplicationPage.Resources>
<!--
LongListSelector 的 GroupHeader 模板
-->
<DataTemplate x:Key="GroupHeaderTemplate">
<Grid Margin="{StaticResource PhoneTouchTargetOverhang}" Background="Transparent">
<Border Background="{StaticResource PhoneAccentBrush}" Width="75" Height="75" HorizontalAlignment="Left">
<TextBlock Text="{Binding IndexLetter}" Foreground="{StaticResource PhoneForegroundBrush}" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
</Border>
</Grid>
</DataTemplate> <!--
LongListSelector 的 Item 模板
-->
<DataTemplate x:Key="ItemTemplate">
<Grid Margin="{StaticResource PhoneTouchTargetOverhang}" Background="Transparent">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextLargeStyle}" />
<TextBlock Text="{Binding Pinyin}" Style="{StaticResource PhoneTextLargeStyle}" Margin="10 0 0 0" />
</StackPanel>
</Grid>
</DataTemplate> <phone:JumpListItemBackgroundConverter x:Key="BackgroundConverter"/>
<phone:JumpListItemForegroundConverter x:Key="ForegroundConverter"/> <!--
JumpList(弹出的索引窗口) 的 样式
-->
<Style x:Key="JumpListStyle" TargetType="phone:LongListSelector">
<Setter Property="GridCellSize" Value="113,113"/>
<Setter Property="LayoutMode" Value="Grid" />
<Setter Property="ItemTemplate">
<Setter.Value >
<DataTemplate >
<Grid>
<Border Background="{Binding Converter={StaticResource BackgroundConverter}}" Width="113" Height="113" Margin="6">
<TextBlock Text="{Binding IndexLetter}" Foreground="{Binding Converter={StaticResource ForegroundConverter}}"
FontWeight="Bold" FontSize="48" Padding="6" VerticalAlignment="Center" />
</Border>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</phone:PhoneApplicationPage.Resources> <Grid x:Name="LayoutRoot" Background="Transparent">
<phone:LongListSelector Name="longListSelector" ItemsSource="{Binding}"
IsGroupingEnabled="True" HideEmptyGroups="True" LayoutMode="List"
SelectionChanged="longListSelector_SelectionChanged"
JumpListStyle="{StaticResource JumpListStyle}"
GroupHeaderTemplate="{StaticResource GroupHeaderTemplate}"
ItemTemplate="{StaticResource ItemTemplate}">
</phone:LongListSelector>
</Grid> </phone:PhoneApplicationPage>

Controls/LongListSelectorDemo.cs

/*
* 演示 LongListSelector 控件的应用
*/ using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using System.Windows.Media;
using System.Diagnostics;
using System.Threading.Tasks; namespace Demo.Controls
{
public partial class LongListSelectorDemo : PhoneApplicationPage
{
public LongListSelectorDemo()
{
InitializeComponent();
} protected async override void OnNavigatedTo(NavigationEventArgs e)
{
await Task.Run(() =>
{
this.longListSelector.Dispatcher.BeginInvoke(() =>
{
// 指定 LongListSelector 的数据源
longListSelector.ItemsSource = CityData.GetData();
});
}); base.OnNavigatedTo(e);
} private void longListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedItem = longListSelector.SelectedItem; // 滚动到指定的 item
longListSelector.ScrollTo(selectedItem);
}
}
}

OK
[源码下载]

与众不同 windows phone (34) - 8.0 新的控件: LongListSelector的更多相关文章

  1. 与众不同 windows phone (35) - 8.0 新的启动器: ShareMediaTask, SaveAppointmentTask, MapsTask, MapsDirectionsTask, MapDownloaderTask

    [源码下载] 与众不同 windows phone (35) - 8.0 新的启动器: ShareMediaTask, SaveAppointmentTask, MapsTask, MapsDirec ...

  2. 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile

    [源码下载] 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile 作者:webabcd 介绍与众不同 windows ...

  3. 与众不同 windows phone (43) - 8.0 相机和照片: 镜头的可扩展性, 图片的可扩展性, 图片的自动上传扩展

    [源码下载] 与众不同 windows phone (43) - 8.0 相机和照片: 镜头的可扩展性, 图片的可扩展性, 图片的自动上传扩展 作者:webabcd 介绍与众不同 windows ph ...

  4. 与众不同 windows phone (44) - 8.0 位置和地图

    [源码下载] 与众不同 windows phone (44) - 8.0 位置和地图 作者:webabcd 介绍与众不同 windows phone 8.0 之 位置和地图 位置(GPS) - Loc ...

  5. 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复

    [源码下载] 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 作者:webabcd 介绍与众不同 win ...

  6. 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件

    [源码下载] 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件 作者:w ...

  7. 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议

    [源码下载] 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议 作者:webabcd 介绍与众不同 windows ...

  8. 与众不同 windows phone (39) - 8.0 联系人和日历

    [源码下载] 与众不同 windows phone (39) - 8.0 联系人和日历 作者:webabcd 介绍与众不同 windows phone 8.0 之 联系人和日历 自定义联系人存储的增删 ...

  9. 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能

    [源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows ...

随机推荐

  1. Java对象生命周期

    [TOC] 1. 创建阶段(Created) 为对象分配存储空间 开始构造对象 从父类到子类对static成员进行初始化 父类成员变量按照顺序初始化,递归调用父类的构造方法 子类成员变量按照顺序初始化 ...

  2. StringUtilsd的isEmpty、isNotEmpty、isBlank、isNotBlank

    1. public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 下面是 Strin ...

  3. C#如何更好地理解引用类型和值类型

    说道值类型和引用类型,在C#中,官方的说法就是: 值类型直接指向数据:一般包括C#自带的所有数字类型,字符类型,bool类型,当然还有自定义的结构类型和枚举类型 而引用类型则是指向数据存储的地址.一般 ...

  4. 申请Payoneer美国万事达信用卡,可获得一个美国虚拟银行账户,立即注册可得25美元

    申请Payoneer美国万事达信用卡,可获得一个美国虚拟银行账户,可以在国内任意一个支持万事达的ATM.POS机上取现和刷卡消费.Payoneer可以网上购物,购买国外的产品,对我们有一个好处就是利用 ...

  5. Show in Finder OC代码

    [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:urls]; /* Activate the Finder, and op ...

  6. Oracle 11g RAC客户端使用SCAN IP无法连接问题

    Oracle 版本:11.2.0.1.0 客户端:Windows Server 2003/PLSQL Developer Oracle服务器端的ip设置如下: ##公网ip 192.168.135.2 ...

  7. 针对 SQL Server 2008 在Windows Server 2008上的访问配置 Windows 防火墙

    现在Windows Server 2008 服务器用的越来越多,2008的防火墙比2003的有了很大的增强,安全性有了更大的提高. 甚至80端口的出站默认都是被关闭的.所以如果在2008Server上 ...

  8. 15个实用的CSS在线实例教程

    前端技术可以说是必须学习的一个技术,现在做网站都需要懂DIV.CSS,在国内很多企业招网页设计师都要求会写基本的前端代码,所以前端技术是 必须了解的,对网页设计师本身也有帮助,今天向大家推荐一些不错的 ...

  9. ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)

    题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...

  10. IIS7下配置SSAS通过HTTP远程连接

    淘宝 问答 学院 博客 资源下载 高端培训                  登录 注册                                   全部问题 文章 话题 人物         ...