默认情况下,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. JavaScript高级程序设计45.pdf

    客户区坐标位置 clientX和clientY保存着鼠标指针在视口中的水平位置坐标和垂直位置坐标(显示出页面的部分叫做客户区,坐标信息不包括页面的滚动距离) var div=document.getE ...

  2. Tyvj P3119 核电站问题 动态规划

    题目:http://tyvj.cn/p/3119 P3119 核电站问题 时间: 1000ms / 空间: 65536KiB / Java类名: Main 描述 一个核电站有N个放核物质的坑,坑排列在 ...

  3. 2008---2009学年(A)B)第1学期《中国近代史纲要》课程考核试卷

    湖南人文科技学院公共课 2008---2009学年第1学期<中国近代史纲要>课程考核试卷(A) 考核方式: (闭卷)                                     ...

  4. ffmpeg, libav学习记录

    转载自:http://hi.baidu.com/y11022053/item/81f12035182257332e0f8196 一个偶然遇到了ffmpeg,看起来不多,而且通用性很强,算是一个扎实的技 ...

  5. 在bootloader及IAP中使用zlib解压缩

    原有的bootloader方案是在片内FLASH上面分成3块,bootloader区占一小块,然后剩下区域平分成两块,一块是运行区,一块是新固件临时存储区. 好在现在FLASH在系统成本中占的比例越来 ...

  6. 再次分享 pyspider 爬虫框架 - V2EX

    再次分享 pyspider 爬虫框架 - V2EX block

  7. Linux Foundation Secure Boot System Released

    As promised, here is the Linux Foundation UEFI secure boot system.  This was actually released to us ...

  8. android考试题

    一.选择题 1. Math.round(11.5)等于多少(    ). Math.round(-11.5) 等于多少(   C  ). A.11 ,-11    B.11 ,-12 C.12 ,-1 ...

  9. Razor 语法快速参考

    Razor 语法快速参考   本文引自:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx 语法名称 Raz ...

  10. FastDFS分布文件系统[转]

    FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...