Windows Phone 之下拉菜单ListPicker
默认情况下,Visual Studio的ToolBox里没有任何下拉菜单的控件可供使用,虽然可以手工输入代码使用隐藏的ComboBox来实现下拉菜单,但是显示出来的菜单与Metro UI主题不匹配。Silverlight for Windows Phone Toolkit提供了多个系统默认没有的控件扩展,像AutoCompleteBox,ContextMenu,DatePicker,ListPicker等等,我们下载安装后就可以使用这些控件。
(1)首先,要下载安装Silverlight for Windows Phone Toolkit,地址:http://silverlight.codeplex.com/releases
当然,也可以直接下载Microsoft.Phone.Controls.Toolkit,不用安装,添加到项目引用即可,我就是这样使用的。
(2)点击Project–Add Reference–.Net选项卡,下拉,找到Microsoft.Phone.Controls.Toolkit,双击添加.
这样就可以在XAML代码中使用所有Toolkit中包含的控件了。
(3)接着添加控件:打开相应的XAML,在phone根元素添加命名空间,
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
(4)在需要添加ListPicker的地方添加ListPicker代码,需要使用toolkit前缀,如:
<toolkit:ListPicker >
<toolkit:ListPicker.Header>
<TextBlock Text="省列表" Foreground="Black"></TextBlock>
</toolkit:ListPicker.Header>
<toolkit:ListPickerItem>
河南省
</toolkit:ListPickerItem>
<toolkit:ListPickerItem>
河北省
</toolkit:ListPickerItem>
<toolkit:ListPickerItem>
安徽省
</toolkit:ListPickerItem>
</toolkit:ListPicker>


再来看一个绑定的例子吧,这个很重要。。。
(1)ListPicker控件有点类似ListBox,但是开始默认显示的是TextBox的样式,对于数据绑定ItemSource和事件选择发生变化SelectionChanged等,在这里不做介绍了,这里主要想说的是一个可能困惑大家的问题,也就是“2011年8月版mango silverlight toolkit for windows phone 当中的listpicker ItemCountThreshold 已经废除”,不能再使用了。 (2)在系统默认<=5个都是不全屏显示的,如果大于5个的话就全屏显示(当展开的ListPicker中项目的数量超过5个时,ListPicker会自动地以整页的模式来显示待选的项目,这样可以有更多的显示空间,在项目的选择上也会更加的方便),在8月份之后呢,这个ItemCountThreshold属性就不见了,换成的是ItemTemplate和FullModeItemTemplate,从字面上面我们可以看出,后面的表示全屏显示的模版。
另外,SelectedIndex设置初始显示值。
我们展示了三种ListPicker控件的使用方法:
// listpicker ItemCountThreshold 已经废除.
// 构造函数
public MainPage()
{
InitializeComponent();
List<Cities> source = new List<Cities>();
source.Add(new Cities() { Name = "Madrid", Country = "ES", Language = "Spanish" });
source.Add(new Cities() { Name = "Las Vegas", Country = "US", Language = "English" });
source.Add(new Cities() { Name = "London", Country = "UK", Language = "English" });
source.Add(new Cities() { Name = "Mexico", Country = "MX", Language = "Spanish" });
source.Add(new Cities() { Name = "Beijing", Country = "CH", Language = "Chinese" });
source.Add(new Cities() { Name = "NewYork", Country = "MS", Language = "English" });
this.listPicker.ItemsSource = source;
this.listPicker2.ItemsSource = source;
this.listPicker3.ItemsSource = source;
this.defaultPicker.ItemsSource = new List<string>() {"Madrid","London","Mexico" };
//this.listPicker.SelectionChanged +=new SelectionChangedEventHandler(listPicker_SelectionChanged);
this.listPicker3.SelectionChanged += new SelectionChangedEventHandler(listPicker_SelectionChanged);
}
//选项更改事件
private void listPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Cities data = (sender as ListPicker).SelectedItem as Cities;
MessageBox.Show(data.Name);
//Get the selected ListPickerItem container instance
ListPickerItem selectedItem = this.listPicker3.ItemContainerGenerator.ContainerFromItem(data) as ListPickerItem;
}
//Button按钮事件
private void selectBtn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show((listPicker3.SelectedItem as Cities).Name.ToString());
}
//第一种:只设置“ItemTemplate”
<toolkit:ListPicker x:Name="listPicker"
ItemTemplate="{StaticResource PickerItemTemplate}"
Header="Cities"
FullModeHeader="Cities"
CacheMode="BitmapCache" />
//第二种 只设置“FullModeItemTemplate”
<toolkit:ListPicker x:Name="listPicker2"
FullModeItemTemplate="{StaticResource PickerFullModeItemTemplate}"
Header="Cities"
FullModeHeader="Cities"
CacheMode="BitmapCache"></toolkit:ListPicker>
<!--正常模式下-->
//第三种“ItemTemplate”和“FullModeItemTemplate”都设置
<toolkit:ListPicker x:Name="listPicker3"
ItemTemplate="{StaticResource PickerItemTemplate}"
FullModeItemTemplate="{StaticResource PickerFullModeItemTemplate}"
Header="Cities"
FullModeHeader="Cities"
CacheMode="BitmapCache" />
//Button按钮用来
<Button x:Name="selectBtn" Height="80" Width="200" Content="SelectItemBtn"
Click="selectBtn_Click"></Button>
现在我们,看一下效果,就知道“ItemTemplate”和“FullModeItemTemplate”都表示什么了:



第三种的全屏和第二种的一样,,,
这样,我们都知道了ListPicker的正确使用了,记住,在绑定的时候,如果选项超过5个,要记得同时设置“ItemTemplate”和“FullModeItemTemplate”
ItemTemplate是在开始的模版
FullModeItemTemplate是全屏的模版
今天用ListPicker的时候,又发现了一个问题:
在绑定过ListPicker之后,然后设置其触发事件,代码如下:
public AddCity()
{
ProvinceList = new ObservableCollection<Province>();
InitializeComponent();
GetProvinces.GetProvinceList(() =>
{
ProvinceList = GetProvinces.provinceList;
this.listPicker1.ItemsSource = ProvinceList;
});
}
private void listPicker1_SelectionChanged_1(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
MessageBox.Show(sender.ToString());
MessageBox.Show("Province");
//Province data = (sender as ListPicker).SelectedItem as Province;
//MessageBox.Show(data.RegionName);
}
会发现,进入该页面的时候,就会先两次执行listPicker1_SelectionChanged_1这个事件处理程序,这是为什么呢?该怎么修改呢? 搜索了下这个问题:
其实:this.listPicker1.ItemsSource = ProvinceList; 执行这个绑定语句时就会触发这个事件。没有办法的额。
Windows Phone 之下拉菜单ListPicker的更多相关文章
- BT之下拉菜单
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" ...
- Bootstrap--组件之下拉菜单
用于显示链接列表的可切换.有上下文的菜单. 对齐 B默认情况下,下拉菜单自动沿着父元素的上沿和左侧被定位为 100% 宽度. 为 .dropdown-menu 添加 .dropdown-menu-ri ...
- Bootstrap学习js插件篇之下拉菜单
案例 通过此插件可以为几乎所有东西添加下拉菜单,包括导航条.标签页.胶囊式按钮. 用于导航条 导航条分为四个部分.第一部分导航头,第二部分导航列,第三部分form查询表单,第四部分导航列. <n ...
- Bootstrap组件之下拉菜单
.dropdown--设置父元素为下拉菜单组件,向下弹出子菜单: .dropup--设置父元素为下拉菜单组件,向上弹出子菜单: .dropdown-toggle--设置button为下拉菜单切换but ...
- 微信小程序开发之下拉菜单
实现功能:点击维保人员,调出下拉菜单.选择子菜单时,显示右边的图标表示选中,并进行赋值并进行搜索筛选 Wxml: <view class="dtclass" bindtap= ...
- Selenium+Python之下拉菜单的定位
1.通过selenium.webdriver.support.ui的Select进行定位 下拉菜单如下图: 定位代码(选择Male): from selenium.webdriver.support. ...
- vue之下拉菜单Dropdown的使用
通过组件slot来设置下拉触发的元素以及需要通过具名slot为dropdown 来设置下拉菜单.默认情况下,下拉按钮只要hover即可,无需点击也会显示下拉菜单. <el-dropdown> ...
- IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)
********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...
- Bootstrap框架(基础篇)之按钮,网格,导航栏,下拉菜单
一,按钮 注意:虽然在Bootstrap框架中使用任何标签元素都可以实现按钮风格,但个人并不建议这样使用,为了避免浏览器兼容性问题,个人强烈建议使用button或a标签来制作按钮. 框架中提供了基础按 ...
随机推荐
- Keepass 2.x 之 同步与触发器
同步 之前用的 Keepass 1.x, 要实现工作电脑和个人电脑上的数据库文件同步,使用的是第三方的网盘同步.但有个问题就是,个人不习惯设置同步网盘开机启动,所以有时候工作电脑上的改动还没有同步上传 ...
- SDPLR的安装过程(matlab)
SDPLR 半正定规划优化工具的安装过程很简单,只要按照SDPLR 1.03-beta User's Guide (short version).pdf的介绍安装就可以. 运行在下载的工具包目录里运行 ...
- 问题-[Delphi]SendMessageTimeout调用后卡住点击任务栏还会出现窗体处理
问题现象:在使用SendMessageTimeout函数后,5秒后WIN把进程挂在起.这时把程序最小化(原因就是不想让用户看到卡的界面),但点击任务栏按钮界面还原了,拦截消息失败(原因是挂起后消息都放 ...
- Area - POJ 1654(求多边形面积)
题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的, ...
- hdoj 1083 Courses【匈牙利算法】
Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- JDBC——Sql Server
sun公司设计一套java语言操作不同的数据库提供的是接口,二具体的实现类是由各大数据库厂商实现的. private static final String driver= "com.mic ...
- win10清理C盘
用win10系统也不是很久,发现C盘容量越来越小了,于是乎扫描了一下,发现有两个文件容量很大 C:/hiberfil.syssize:1660444672 C:/swapfile.syssize:26 ...
- Java或web中解决所有路径问题
Java开发中使用的路径,分为两种:绝对路径和相对路径.归根结底,Java本质上只能使用绝对路径来寻找资源.所有的相对路径寻找资源的方法,都不过是一些便利方法.不过是API在底层帮助我们构建了绝对路径 ...
- 深入了解当前ETL中用到的一些基本技术
数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到的 ...
- Android的Toast介绍-android学习之旅(三十六)
Toast简单介绍 Toast是一个很方便的消息提示框.会在桌面显示一个短暂的消息提示.有两个特点: 1.消息不会获得焦点. 2.过一段时间会自己主动消失. Toast的生成步骤 1.调用构造器或者静 ...