4.15 浮出控件(Flyout)

浮出控件(Flyout)是一个轻型的辅助型的弹出控件,通常会作为提示或者要求用户进行相关的交互来使用。Flyout控件与Windows Phone里面的弹出框MessageDialog是有很大区别的,首先Flyout控件是一个辅助控件,需要与其他控件结合起来才能使用,还有就是取消的规则不一样,Flyout控件可以通过单击或在外部点击都可以轻松消除浮出控件。你可以使用Flyout控件收集用户输入、显示与某个项目相关的更多信息或者要求用户确认某个操作。只有当为了响应用户点击时才应显示Flyout控件,也就是说Flyout控件并不是直接就显示出来,而是必须要用户的操作才能呈现出来;当用户在弹出窗口外部点击时,Flyout控件就会消失,这也是Flyout控件默认的关闭规则。控件的XAML语法如下:

<Button ><Button.Flyout><Flyout><!--浮出的UI内容--></Flyout></Button.Flyout></Button>

从控件的XAML语法中可以看出,Flyout控件本身就是一种辅助性的控件,它必须要与其他的控件结合起来使用才可以,那么通常会将Flyout控件附加到一个Button控件上直接相应Button控件的单击事件,因此Button控件拥有Flyout属性以简化附加和打开 Flyout 控件。单击按钮时,附加到按钮的浮出控件自动打开,这是不需要处理任何事件即可打开浮出控件。那么对于非Button控件是不是不能使用Flyout控件呢?那么答案肯定是否定的,非Button控件也一样可以使用Flyout控件,你也可以使用FlyoutBase.AttachedFlyout附加属性,将 Flyout 控件附加到任何FrameworkElement对象。因为Flyout控件是必须要相应某个用户的操作的,Button控件是默认关联到了Click事件,如果是用FlyoutBase.AttachedFlyout附加属性来添加Flyout控件的这种情况下,就必须响应FrameworkElement控件上的交互,例如 Tapped,并在你的代码中打开Flyout控件。示例代码如下所示:

XAML代码:

<TextBlock Text=" Tapped事件触发Flyout" Tapped="TextBlock_Tapped"><FlyoutBase.AttachedFlyout><Flyout><!--浮出的UI内容--></Flyout></FlyoutBase.AttachedFlyout></TextBlock>

C#代码:

private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e){FrameworkElement element = sender as FrameworkElement;if (element != null){FlyoutBase.ShowAttachedFlyout(element);}}

从上文我们知道了Flyout控件的两种创建方式,一种是通过Button控件的Flyout属性添加,另外的一种就是通过FlyoutBase.AttachedFlyout附件属性给任何的FrameworkElement对象来添加。那么在Windows Phone上Flyout控件一共有6种不同的类型:Flyout、DatePickerFlyout、TimePickerFlyout、PickerFlyout、ListPickerFlyout和MenuFlyout。

(1)Flyout

Flyout类型表示用于处理自定义的浮出窗口的。Flyout控件经常会使用的事件是Closed、Opened和Opening事件,分别表示是在关闭、已打开和正在打开的三种时机触发的时间,在实际的程序开发中通常会在Closed事件处理程序中来获取用户的操作结果。同时这三种事件也是其他类型的Flyout控件的共性,所以你可以把Flyout类型的Flyout控件是最简单和最基本的Flyout控件。

(2)DatePickerFlyout和TimePickerFlyout

DatePickerFlyout类型表示是选择日期的浮出窗口;TimePickerFlyout表示是选择时间的浮出窗口。DatePickerFlyout与TimePickerFlyout类型的Flyout控件实际上是和TimePicker与DatePicker控件是非常类似的,只不过Flyout控件可以监控到TimePicker与DatePicker控件的弹出时机。

(3)PickerFlyout和ListPickerFlyout

PickerFlyout表示是选择的浮出窗口,可以在页面底下添加确认的菜单栏用于用户进行确认;ListPickerFlyout表示是列表形式展示的浮出窗口,需要通过集合数据绑定来呈现列表的选择。PickerFlyout和ListPickerFlyout类型的Flyout控件是选择类型的浮出窗口,它们与其他的Flyout控件的主要区别是提供了选中确认的时间分别是PickerFlyout对应的Confirmed事件和ListPickerFlyout对应的ItemsPicked事件,而需要注意的是ListPickerFlyout需要通过数据绑定来实现选择的列表,关于数据绑定的知识在后续的章节还会进行更加详细的介绍。

(4)MenuFlyout

MenuFlyout表示是上下文菜单的选择浮出窗口。一个MenuFlyout会包含若干个MenuFlyoutItem,每个MenuFlyoutItem表示一个选项,用户可以进行单击,同时同时通过MenuFlyoutItem的Click单击事件来处理用户的单击请求。MenuFlyout还有一个很大的特点就是当用户当其弹出的时候,会把程序页面的其他部分会往里面凹下去以强调弹出的MenuFlyout浮出层。

下面给出Flyout控件的示例:6种类型的Flyout控件的使用和Button与非Button控件对Flyout控件的集成。

代码清单4-15Flyout控件(源代码:第4章\Examples_4_15)

MainPage.xaml文件主要代码
------------------------------------------------------------------------------------------------------------------<StackPanel><!--最基本的Flyout 控件,自定义其浮出的内容--><Button Content="Show Flyout"><Button.Flyout><Flyout><StackPanel ><TextBox PlaceholderText="请输入名字"/><Button HorizontalAlignment="Right" Content="确定"/></StackPanel></Flyout></Button.Flyout></Button><!--浮出上下文菜单,点击菜单后改变当前按钮上的文本内容--><Button x:Name="menuFlyoutButton" Content="Show MenuFlyout" ><Button.Flyout ><MenuFlyout><MenuFlyoutItem Text="Option 1" Click="MenuFlyoutItem_Click"/><MenuFlyoutItem Text="Option 2" Click="MenuFlyoutItem_Click"/><MenuFlyoutItem Text="Option 3" Click="MenuFlyoutItem_Click"/></MenuFlyout></Button.Flyout></Button><!--浮出选择日期弹窗,点击确定后会触发DatePicked事件,然后可以获取选中的日期--><Button Content="Show DatePicker" ><Button.Flyout><Controls:DatePickerFlyout Title="选择日期:"  DatePicked="DatePickerFlyout_DatePicked"/></Button.Flyout></Button><!--浮出选择时间弹窗,点击确定后会触发TimePicked事件,然后可以获取选中的时间---><Button Content="Show TimePicker" ><Button.Flyout><Controls:TimePickerFlyout Title="选择时间:"  TimePicked="TimePickerFlyout_TimePicked"/></Button.Flyout></Button><!--浮出选择弹窗,显示底下的确认取消菜单栏并且处理其确认事件Confirmed---><Button Content="Show Picker" ><Button.Flyout><Controls:PickerFlyout   Confirmed="PickerFlyout_Confirmed" ConfirmationButtonsVisible="True"><TextBlock Text="你确定吗?????" FontSize="30" Margin="0 100 0 0"/></Controls:PickerFlyout></Button.Flyout></Button><!--浮出选择列表弹窗,绑定集合的数据,处理选中的事件ItemsPicked--><Button Content="Show ListPicker"><Button.Flyout><Controls:ListPickerFlyout x:Name="listPickerFlyout" Title="选择手机品牌:" ItemsPicked="listPickerFlyout_ItemsPicked"  ><Controls:ListPickerFlyout.ItemTemplate><DataTemplate><TextBlock Text="{Binding}" FontSize="30"></TextBlock></DataTemplate></Controls:ListPickerFlyout.ItemTemplate></Controls:ListPickerFlyout></Button.Flyout></Button><!--使用附加属性FlyoutBase.AttachedFlyout来实现Flyout控件--><TextBlock Text="请点击我!" Tapped="TextBlock_Tapped" FontSize="20"><FlyoutBase.AttachedFlyout><Flyout><TextBox Text="你好!"/></Flyout></FlyoutBase.AttachedFlyout></TextBlock></StackPanel>

MainPage.xaml.cs文件主要代码
------------------------------------------------------------------------------------------------------------------public MainPage(){this.InitializeComponent();// 绑定ListPickerFlyout的数据源listPickerFlyout.ItemsSource = new List<string> { "诺基亚", "三星", "HTC", "苹果", "华为" };}// PickerFlyout的确认事件,在事件处理程序里面可以处理相关的确认逻辑private async void PickerFlyout_Confirmed(PickerFlyout sender, PickerConfirmedEventArgs args){await new MessageDialog("你点击了确定").ShowAsync();}// TimePickerFlyout的时间选中事件,在事件处理程序里面可以获取选中的时间private async void TimePickerFlyout_TimePicked(TimePickerFlyout sender, TimePickedEventArgs args){await new MessageDialog(args.NewTime.ToString()).ShowAsync();}// DatePickerFlyout的日期选中事件,在事件处理程序里面可以获取选中的日期private async void DatePickerFlyout_DatePicked(DatePickerFlyout sender, DatePickedEventArgs args){await new MessageDialog(args.NewDate.ToString()).ShowAsync();}// MenuFlyout的菜单选项的点击事件,点击后直接获取菜单栏的文本显示到按钮上private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e){menuFlyoutButton.Content = (sender as MenuFlyoutItem).Text;}// 通过FlyoutBase.ShowAttachedFlyout方法来展示出Flyout控件private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e){FrameworkElement element = sender as FrameworkElement;if (element != null){FlyoutBase.ShowAttachedFlyout(element);}}// ListPickerFlyout的选中事件,点击列表的某一项便会触发,在事件处理程序中通常会获取选中的项目来进行相关逻辑的处理private async void listPickerFlyout_ItemsPicked(ListPickerFlyout sender, ItemsPickedEventArgs args){if (sender.SelectedItem != null){await new MessageDialog("你选择的是:" + sender.SelectedItem.ToString()).ShowAsync();}}

本文来源于《深入浅出Windows Phone 8.1 应用开发》

WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html

源代码下载:http://vdisk.weibo.com/s/zt_pyrfNHb99O

欢迎关注我的微博@WP林政   微信公众号:wp开发(号:wpkaifa)

WP8.1技术交流群:372552293

[深入浅出WP8.1(Runtime)]浮出控件(Flyout)相关推荐

  1. 打开word文档总是自动弹出控件工具条的解决办法:

    打开word文档总是自动弹出控件工具条的解决办法: 1.查看是否word文档和模板中了'apmp宏病毒,按ALT+F11组合键,双击当前文档下属的ThisDocument,清空里面的内容:双击Norm ...

  2. 关于ASP.NET直接从一个项目复制WEB窗体后无法点出控件名称(ID)

    今天做项目的时候,直接把一个项目的WEB窗体复制到了另一个项目. 于是出现了一个问题:--不管往复制过来的窗体中添加什么控件都无法在后台代码中引用该控件的名称(ID).百思不得其解. 根据百度做了重新 ...

  3. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  4. 上拉滑动拖出控件 scrolllayout

    最近UI设计了这样一个效果 仿照地图底部上拉滑动拖出布局 在网上经过调查 发现scrolllayout这个轮子 下面讲如何使用 1.集成 //向上滑动抽屉 implementation 'com.yi ...

  5. 打开word、excel弹出控件安装弹窗

    背景:使用公司系统的时候,需要安装一些自定义的控件,在不使用以后卸载了.但是每次一打开word或者excel等办公软件的时候,就会弹出下面这个窗口 虽然不影响正常使用,但是每次打开都会弹窗很影响心情. ...

  6. 【UWP通用应用开发】控件、应用栏

    控件的属性.事件与样式资源 怎样加入控件 加入控件的方式有多种,大家更喜欢以下哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...

  7. Windows App开发之常用控件与应用栏

    控件的属性.事件与样式资源 如何添加控件 添加控件的方式有多种,大家更喜欢下面哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...

  8. Windows App开发之经常使用控件与应用栏

    控件的属性.事件与样式资源 怎样加入控件 加入控件的方式有多种,大家更喜欢以下哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...

  9. 深入浅出VC++串口编程--基于控件

    深入浅出VC++串口编程之基于控件源代码下载 MSComm控件 Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSCo ...

最新文章

  1. iOS 自动布局框架 – Masonry 详解
  2. 机器学习可解释性工具箱XAI
  3. Uber无人车撞死人,安全员被控过失杀人,算法免于追责
  4. 《疯狂JAVA讲义》笔记1
  5. 新博客地址: https://sanzo.top
  6. java并发编程(更新)
  7. 多源最短路径---Floyd-Warshall算法
  8. 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home...
  9. android.mk 编译选项,Android.mk中加入选项,编译生成可以直接安装的apk包
  10. 《金字塔原理》读书笔记
  11. ILRuntime入门11 LitJson
  12. ACM卡常数(各种玄学优化)
  13. 51job爬取职位搜索下面的2000条职位信息
  14. Faraway(枚举 去绝对值)
  15. 如何将计算机网络连接打印机,电脑怎样连接打印机,教您电脑如何连接网络打印机...
  16. 泛微OA系统排名?泛微OA办公系统怎么选?什么是用户口碑最好的泛微OA系统?
  17. SAE 联合乘云至达与谱尼测试携手共同抗疫
  18. 从再生龙(clonezilla)镜像直接提取文件
  19. Ionic4.x ion-refresher 下拉更新
  20. HDU 1567(2006)

热门文章

  1. mysql 修改表 引擎,mysql如何修改表类型(表引擎)
  2. 用tsmmc.MSC方式在xp和Win7集中管理多台Win2003服务器
  3. div中文字,图片居中对齐,兼容FF、IE
  4. 深入了解ASP.NET运行内幕 .txt
  5. WordPress基础教学:绝对必装的JetPack外挂
  6. UITableView 系列四 :项目中行的操作 (添加移动和删除)(实例)
  7. JavaScript replace string 替换字符
  8. Leetcode算法题(C语言)7--两个数组的交集 II
  9. Ethercat解析(八)之主站运行阶段
  10. 【AI视野·今日CV 计算机视觉论文速览 第222期】Fri, 18 Jun 2021