与众不同 windows phone (50) - 8.1 新增控件: PickerFlyout, ListPickerFlyout

[源码下载]

作者:webabcd

介绍
与众不同 windows phone 8.1 之 新增控件

  • PickerFlyout - 选取器控件
  • ListPickerFlyout - 列表选取器控件

示例
1、演示 PickerFlyout 的应用
PickerFlyoutDemo.xaml

<Page
    x:Class="Demo.Control.PickerFlyoutDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Demo.Control"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <StackPanel Orientation="Vertical">

            <!--xaml 方式弹出选取器控件-->
            <Button Content="Show Picker" >
                <Button.Flyout>
                    <PickerFlyout ConfirmationButtonsVisible="True" Confirmed="PickerFlyout_Confirmed" Closed="PickerFlyout_Closed">
                        <TextBlock Text="Xbox One集全方位娱乐及游戏大作于一身的综合娱乐设备,让您在各个区间轻松跳转.让您在游戏,娱乐及在线视频间轻松跳转"
                                   FontSize="30" Margin="0 20 0 0" TextWrapping="Wrap" />
                    </PickerFlyout>
                </Button.Flyout>
            </Button>

            <!--非 xaml 方式弹出选取器控件-->
            <Button Name="button" Content="Show Picker" Click="button_Click_1" Margin="0 10 0 0" />

            <TextBlock Name="lblMsg" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

PickerFlyoutDemo.xaml.cs

/*
 * PickerFlyout - 选取器控件(wp only)
 *     ConfirmationButtonsVisible - 是否显示按钮(一个确认按钮,一个取消按钮),不显示的话则只能通过“返回键”返回
 *     Content - 选取器控件显示的内容
 *
 *     ShowAtAsync(FrameworkElement target) - 弹出选取器控件
 *     Hide() - 隐藏弹出框
 *
 *     Confirmed - 点击确认按钮后触发的事件
 *     Opening, Opened, Closed - 几个顾名思义的事件
 */

using System;
using Windows.UI.Xaml.Controls;

namespace Demo.Control
{
    public sealed partial class PickerFlyoutDemo : Page
    {
        public PickerFlyoutDemo()
        {
            this.InitializeComponent();
        }

        private void PickerFlyout_Confirmed(PickerFlyout sender, PickerConfirmedEventArgs args)
        {
            lblMsg.Text += "confirmed";
            lblMsg.Text += Environment.NewLine;
        }

        // 通过 Confirmed 事件和 Closed 事件的结合,可以判断出用户是否点击了“取消”按钮或者按了“返回键”
        private void PickerFlyout_Closed(object sender, object e)
        {
            lblMsg.Text += "closed";
            lblMsg.Text += Environment.NewLine;
        }

        // 非 xaml 方式弹出选取器控件
        private async void button_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            PickerFlyout flyout = new PickerFlyout();
            flyout.Content = new TextBlock { Text="????????????????????????" };
            bool result = await flyout.ShowAtAsync(button);
        }
    }
}

2、演示 ListPickerFlyout 的应用
ListPickerFlyoutDemo.xaml

<Page
    x:Class="Demo.Control.ListPickerFlyoutDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Demo.Control"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <StackPanel Orientation="Vertical">

            <!--
                弹出简单的列表选取器控件
                    Title - 弹出框的标题
                    DisplayMemberPath - 需要显示的绑定对象中的指定字段
                    SelectedValuePath - 调用 SelectedValue 时,返回的是选中对象中的指定字段的值
                    ItemsPicked - 用户选中某一 item 后触发的事件
            -->
            <Button Content="Show ListPicker(simple)">
                <Button.Flyout>
                    <ListPickerFlyout x:Name="listPickerFlyoutSimple" Title="请选择"
                                      DisplayMemberPath="Title" SelectedValuePath="Title"
                                      ItemsPicked="listPickerFlyoutSimple_ItemsPicked" Closed="listPickerFlyout_Closed">
                    </ListPickerFlyout>
                </Button.Flyout>
            </Button>

            <!--
                弹出单选列表选取器控件
                    Title - 弹出框的标题
                    SelectionMode - 选择模式(Single 或 Multiple)
                    ItemsPicked - 用户选中某一 item 后触发的事件
            -->
            <Button Content="Show ListPicker(single)" Margin="0 10 0 0">
                <Button.Flyout>
                    <ListPickerFlyout x:Name="listPickerFlyoutSingle" Title="请选择"
                                      SelectionMode="Single"
                                      ItemsPicked="listPickerFlyoutSingle_ItemsPicked" Closed="listPickerFlyout_Closed">
                        <ListPickerFlyout.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Source="{Binding ImageUrl}" Width="20" Height="20" />
                                    <TextBlock Text="{Binding Title}" FontSize="20" Margin="10 0 0 0" />
                                </StackPanel>
                            </DataTemplate>
                        </ListPickerFlyout.ItemTemplate>
                    </ListPickerFlyout>
                </Button.Flyout>
            </Button>

            <!--
                弹出多选列表选取器控件(有“完成”按钮和“取消”按钮)
                    Title - 弹出框的标题
                    SelectionMode - 选择模式(Single 或 Multiple)
                    ItemsPicked - 用户单击“完成”按钮后触发的事件
            -->
            <Button Content="Show ListPicker(multi)" Margin="0 10 0 0">
                <Button.Flyout>
                    <ListPickerFlyout x:Name="listPickerFlyoutMulti" Title="请选择"
                                      SelectionMode="Multiple"
                                      ItemsPicked="listPickerFlyoutMulti_ItemsPicked" Closed="listPickerFlyout_Closed">
                        <ListPickerFlyout.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Source="{Binding ImageUrl}" Width="20" Height="20" />
                                    <TextBlock Text="{Binding Title}" FontSize="20" Margin="10 0 0 0" />
                                </StackPanel>
                            </DataTemplate>
                        </ListPickerFlyout.ItemTemplate>
                    </ListPickerFlyout>
                </Button.Flyout>
            </Button>

            <TextBlock Name="lblMsg" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

ListPickerFlyoutDemo.xaml.cs

/*
 * ListPickerFlyout - 列表选取器控件(wp only)
 *     ItemsSource - 数据源
 *
 *     ShowAtAsync(FrameworkElement target) - 弹出列表选取器控件
 *     Hide() - 隐藏弹出框
 *
 *     ItemsPicked - 用户选中列表中的项后触发的事件
 *     Opening, Opened, Closed - 几个顾名思义的事件
 */

using System;
using System.Collections.ObjectModel;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace Demo.Control
{
    public sealed partial class ListPickerFlyoutDemo : Page
    {
        private ObservableCollection<ItemModel> _items = new ObservableCollection<ItemModel>();

        public ListPickerFlyoutDemo()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 构造并绑定数据
            for (int i = 0; i < 10; i++)
            {
                _items.Add(new ItemModel()
                {
                    Title = (i.ToString()),
                    ImageUrl = "/Assets/Kid.png"
                });
            }
            listPickerFlyoutSimple.ItemsSource = _items;
            listPickerFlyoutSingle.ItemsSource = _items;
            listPickerFlyoutMulti.ItemsSource = _items;
        }

        // 用户选中某一 item 后触发的事件
        private void listPickerFlyoutSimple_ItemsPicked(ListPickerFlyout sender, ItemsPickedEventArgs args)
        {
            lblMsg.Text += "selected value: " + sender.SelectedValue;
            lblMsg.Text += Environment.NewLine;
        }

        // 用户选中某一 item 后触发的事件
        private void listPickerFlyoutSingle_ItemsPicked(ListPickerFlyout sender, ItemsPickedEventArgs args)
        {
            lblMsg.Text += "selected title: " + ((ItemModel)sender.SelectedItem).Title;
            lblMsg.Text += Environment.NewLine;
        }

        // 用户单击“完成”按钮后触发的事件
        private void listPickerFlyoutMulti_ItemsPicked(ListPickerFlyout sender, ItemsPickedEventArgs args)
        {
            // 此次多选操作删除的 items
            foreach (var item in args.RemovedItems)
            {
                lblMsg.Text += "removed item title: " + ((ItemModel)item).Title;
                lblMsg.Text += Environment.NewLine;
            }

            // 此次多选操作新增的 items
            foreach (var item in args.AddedItems)
            {
                lblMsg.Text += "added item title: " + ((ItemModel)item).Title;
                lblMsg.Text += Environment.NewLine;
            }
        }

        // 通过 ItemsPicked 事件和 Closed 事件的结合,可以判断出用户是否点击了“取消”按钮或者按了“返回键”
        private void listPickerFlyout_Closed(object sender, object e)
        {
            lblMsg.Text += "closed";
            lblMsg.Text += Environment.NewLine;
        }

        class ItemModel
        {
            public string Title { get; set; }
            public string ImageUrl { get; set; }
        }
    }
}

OK
[源码下载]

时间: 2024-10-06 13:14:08

与众不同 windows phone (50) - 8.1 新增控件: PickerFlyout, ListPickerFlyout的相关文章

与众不同 windows phone (51) - 8.1 新增控件: DatePickerFlyout, TimePickerFlyout

[源码下载] 作者:webabcd 介绍与众不同 windows phone 8.1 之 新增控件 DatePickerFlyout - 日期选取器控件 TimePickerFlyout - 时间选取器控件 示例1.演示 DatePickerFlyout 的应用DatePickerFlyoutDemo.xaml <Page x:Class="Demo.Control.DatePickerFlyoutDemo" xmlns="http://schemas.microsof

Windows 8.1 应用再出发 - 几种新增控件(1)

原文:Windows 8.1 应用再出发 - 几种新增控件(1) Windows 8.1 新增的一些控件,分别是:AppBar.CommandBar.DatePicker.TimePicker.Flyout.MenuFlyout.SettingsFlyout.Hub 和 Hyperlink.我们分成两篇来介绍,本篇先为大家介绍AppBar.CommandBar.DatePicker 和 TimePicker. 1. AppBar Windows 8.1引入了几种新的控件来帮助我们更快捷的创建应用

重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar

[源码下载] 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之新增控件 AppBar - 应用程序栏控件(新增了 AppBarButton, AppBarToggleButton, AppBarSeparator) CommandBar - 应用程序栏控件(AppBar 简化版) 示例1.演示 AppBar 的应用AppBarDemo.xaml

Windows 8.1 应用再出发 (WinJS) - 几种新增控件(2)

原文:Windows 8.1 应用再出发 (WinJS) - 几种新增控件(2) 上篇我们介绍了Windows 8.1 和 WinJS 中新增控件中的 AppBarCommand.BackButton.Hub.ItemContainer,本篇我们接着来介绍 NavBar.Repeater 和 WebView. 1. NavBar NavBar 是专门用于导航命令的应用栏控件,它是AppBar 的子类.可以完成简单的链接,也可以完成多层链接. 类似XAML 中的 TopAppBar,NavBar

Windows 8.1 应用再出发 (WinJS) - 几种新增控件(1)

原文:Windows 8.1 应用再出发 (WinJS) - 几种新增控件(1) Windows 8.1 和 WinJS 引入了以下新控件和功能,分别是:AppBarCommand.BackButton.Hub.ItemContainer.NavBar.Repeater.WebView. 本篇我们先来介绍 AppBarCommand.BackButton.Hub.ItemContainer,其余三种放在下一篇中介绍. 1. AppBarCommand Windows 8.1 加入了AppBarC

Windows 8.1 应用再出发 - 几种新增控件(2)

原文:Windows 8.1 应用再出发 - 几种新增控件(2) 本篇我们接着来介绍Windows 8.1 的新增控件,分别是:Flyout.MenuFlyout.SettingsFlyout.Hub 和 Hyperlink. 1. Flyout Flyout被称为浮出控件,能起到提示或者简单交互作用.我们可以利用它来要求用户确认操作.收集用户输入信息或显示提示信息等.只有当用户点击时才显示Flyout,当点击外部任意点时,Flyout消失. Flyout通常会附加到Button上,所以Butt

重新想象 Windows 8.1 Store Apps (73) - 新增控件: DatePicker, TimePicker

原文:重新想象 Windows 8.1 Store Apps (73) - 新增控件: DatePicker, TimePicker [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之新增控件 DatePicker - 日期选择控件 TimePicker - 时间选择控件 示例1.演示 DatePicker 的应用DatePickerDemo.xaml <Page x:Class="Windows81.Controls.DatePickerD

重新想象 Windows 8.1 Store Apps (74) - 新增控件: Flyout, MenuFlyout, SettingsFlyout

原文:重新想象 Windows 8.1 Store Apps (74) - 新增控件: Flyout, MenuFlyout, SettingsFlyout [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之新增控件 Flyout - Flyout 控件 MenuFlyout - 菜单 Flyout 控件 SettingsFlyout - 设置面板 Flyout 控件 示例1.演示 Flyout 的应用FlyoutDemo.xaml <Page x

重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink

原文:重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之新增控件 Hub - 中心控件(由一个 header 和多个 section 组成) Hyperlink - 超链接控件(在 RichEditBox, RichTextBlock, RichTextBlockOverflow 内使用) 示例1.演示 Hub 的应用HubDemo.xa