默认情况下,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的更多相关文章

  1. BT之下拉菜单

    <div class="dropdown"> <button class="btn btn-default dropdown-toggle" ...

  2. Bootstrap--组件之下拉菜单

    用于显示链接列表的可切换.有上下文的菜单. 对齐 B默认情况下,下拉菜单自动沿着父元素的上沿和左侧被定位为 100% 宽度. 为 .dropdown-menu 添加 .dropdown-menu-ri ...

  3. Bootstrap学习js插件篇之下拉菜单

    案例 通过此插件可以为几乎所有东西添加下拉菜单,包括导航条.标签页.胶囊式按钮. 用于导航条 导航条分为四个部分.第一部分导航头,第二部分导航列,第三部分form查询表单,第四部分导航列. <n ...

  4. Bootstrap组件之下拉菜单

    .dropdown--设置父元素为下拉菜单组件,向下弹出子菜单: .dropup--设置父元素为下拉菜单组件,向上弹出子菜单: .dropdown-toggle--设置button为下拉菜单切换but ...

  5. 微信小程序开发之下拉菜单

    实现功能:点击维保人员,调出下拉菜单.选择子菜单时,显示右边的图标表示选中,并进行赋值并进行搜索筛选 Wxml: <view class="dtclass" bindtap= ...

  6. Selenium+Python之下拉菜单的定位

    1.通过selenium.webdriver.support.ui的Select进行定位 下拉菜单如下图: 定位代码(选择Male): from selenium.webdriver.support. ...

  7. vue之下拉菜单Dropdown的使用

    通过组件slot来设置下拉触发的元素以及需要通过具名slot为dropdown 来设置下拉菜单.默认情况下,下拉按钮只要hover即可,无需点击也会显示下拉菜单. <el-dropdown> ...

  8. IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

    ********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...

  9. Bootstrap框架(基础篇)之按钮,网格,导航栏,下拉菜单

    一,按钮 注意:虽然在Bootstrap框架中使用任何标签元素都可以实现按钮风格,但个人并不建议这样使用,为了避免浏览器兼容性问题,个人强烈建议使用button或a标签来制作按钮. 框架中提供了基础按 ...

随机推荐

  1. poj 3237 Tree(树链剖分,线段树)

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 7268   Accepted: 1969 Description ...

  2. (转载)反编译android的apk文件步骤

    下面的方法我已经尝试过,完全可以成功,重点的步骤我在这里说一下 1.必须要有java环境,记得配置好环境变量 2.如果只查看class中的函数文件,只需要下载dex2jar和jd-gui 3.下载地址 ...

  3. WORD文档的长串数字如何粘贴到excel

    有问题,才有提高 问题描述: 现 word 文档中有好多长长的数字(如下),我需要将它们弄进 Excel 中 直接[复制],[粘贴],结果显示如下: 然后再设置单元格格式中的数字,无论选哪一个都得不到 ...

  4. phpDesigner 工具快捷键巧用

    Zend Studio工具默认的快捷方式, 如果你从事php工作, 自然能够体会到一些便利性, 比如CTRL+D, 可以直接复制当前一行, 这对于重复代码及调试都有很大帮助. Ctrl+U转换大小写之 ...

  5. Java-工厂设计模式

    引言: 工厂设计模式分为三种: 简单工厂 工厂方法 抽象工厂 联想四种情况 (1).还没有工厂时代:假如还没有工业革命,如果一个客户要一件产品,一般的做法是客户去创建一件产品,然后拿来用. (2).简 ...

  6. 12种超酷HTML5 SVG和CSS3浮动标签效果

    这是一组效果很炫酷的SVG和CSS3表单浮动标签特效.这组浮动标签特效共12种效果,这些浮动标签效果部分在元素的伪元素上使用CSS transitions和CSS animations完毕,一部分则使 ...

  7. easyui 很好很强大

    easyui 很好很强大 http://api.btboys.com/easyui/   中文API教程 分页,拖动等效果很漂亮...

  8. Activiti5.13数据库表结构设计

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  9. (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间

    亲测一: 1.找到D:\MyEclipse 8.5\configuration\ config.ini 这个文件 2.找到这一行instance.area.default 3.将后面的地址替换为你想要 ...

  10. java 字节流与字符流的区别 (转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...