【Win 10应用开发】自定义浮动层——Flyout
最近几天总是下雨,真是“何处秋窗无雨声”,也“不知风雨几时休”。
好,进入正题。
弹出层有三种。
第一种是ContentDialog,即内容对话框,它其实类似于模态对话框,弹出后会覆盖整个窗口区域,并且总在最前面,你只有关闭了对话框之后才能进行其他操作。
第二种就是提示文本,比如在一个Windows窗口上,你把鼠标移到窗口的关闭按钮上,稍稍停一下,你会下面有提示文本出来,告诉这是关闭按钮。
第三种有点像提示文本,但它不会自动消息,而是等你点击了其他对象后它会消失,很像下拉列表控件的弹出框。
Flyout类属于第三种弹出层,或者叫浮动层吧,在HTML中常常用div来实现。Flyout类里面其实封装了一个ContentControl控件,用来显示UI内容,这个内容控件是从ContentControl类派生的,叫FlyoutPresenter。如果想修改这个被封装了的内容控件的样式,就要通过Flyout类的FlyoutPresenterStyle属性来完成,该属性所设置的Style会被应用到内部的FlyoutPresenterStyle控件实例上。
即,Flyout上弹出来的可视化部分是可以由开发者自己来定义的,通过Flyout.Content属性来设定,只要是UIElement的子类均可。
Flyout是从FlyoutBase派生出来的。使用Flyout的最简单方法是和Button控件一起协作,因为Button类有一个Flyout属性,只要向该属性设置一个FlyoutBase的子类的实例,不用任何代码处理,连Click事件也不用处理,运行后就可以通过点击按钮来显示浮出层。
举个例子:
<Button Content="fly out">
<Button.Flyout>
<Flyout>
<TextBlock Text="白日放歌须纵酒" Foreground="Blue" FontSize="25"/>
</Flyout>
</Button.Flyout>
</Button>
Flyout上直接放了一个显示文本的TextBlock对象。在程序运行阶段,只要单击一下按钮,就会弹出来。如下图。
大伙伴们也发现,只有Button类才有Flyout属性,如果像HyperlinkButton这样的控件,没有那个Flyout属性,该如何处理呢。没事,FlyoutBase类有个附加属性,可以把FlyoutBase实例附加到某个可视化对象上。看例子吧。
<HyperlinkButton Content="click me" Click="OnLinkClick" Margin="0,25" >
<FlyoutBase.AttachedFlyout>
<Flyout>
<Ellipse Width="32" Height="32" Fill="Red" />
</Flyout>
</FlyoutBase.AttachedFlyout>
</HyperlinkButton>
这时候,它不会自动处理,如果不写代码的话,运行程序后,你点击链接是没有反应的,所以要处理其单击事件。
private void OnLinkClick(object sender, RoutedEventArgs e)
{
HyperlinkButton link = sender as HyperlinkButton;
FlyoutBase.ShowAttachedFlyout(link);
}
FlyoutBase有个静态方法,叫ShowAttachedFlyout,方法参数是附加了FlyoutBase对象的元素,就我们上面的例子来说,是HyperlinkButton元素上附加了一个Flyout实例,因此,在调用HyperlinkButton方法时,要把HyperlinkButton实例传递方法参数。
方法会自动找到附加在HyperlinkButton上的Flyout实例,并显示出来。结果如下图。

上文我提到过,如果要自定义Flyout的控件容器的样式,可以设置FlyoutPresenterStyle属性,所用到的Style的TargetType是FlyoutPresenter类。看看例子。
<Button Content="点一点,看一看">
<Button.Flyout>
<Flyout Placement="Right">
<TextBlock Text="青春作伴好还乡" Foreground="LightGray" FontSize="24" />
<Flyout.FlyoutPresenterStyle>
<Style TargetType="FlyoutPresenter">
<Setter Property="Background" Value="Purple"/>
</Style>
</Flyout.FlyoutPresenterStyle>
</Flyout>
</Button.Flyout>
</Button>
Placement属性用来指定浮出层的位置,是相对于这个Button而言的位置。本例中,让Flyout出现在按钮的右方。
结果如图。

好了,上面几个简单到无法再简单的例子,向大伙伴们演示了Flyout组件的用法。本文到此就要收笔了,有空再聊。
【Win 10应用开发】自定义浮动层——Flyout的更多相关文章
- 【Win 10 应用开发】RTM版的UAP项目解剖
Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- 【Win 10 应用开发】导入.pfx证书
这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...
- 【Win 10应用开发】认识一下UAP项目
Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...
- 【Win 10 应用开发】在代码中加载文本资源
记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...
- 【Win 10 应用开发】UI Composition 札记(一):视图框架的实现
在开始今天的内容之前,老周先说一个问题,这个问题记得以前有人提过的. 设置 Windows.ApplicationModel.Core.CoreApplicationView.TitleBar.Ext ...
- 【Win 10应用开发】延迟共享
延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...
- 【Win 10 应用开发】Toast通知激活应用——前台&后台
老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...
随机推荐
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- C#异步编程(一)
异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...
- 告别被拒,如何提升iOS审核通过率(上篇)
iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...
- ASP.NET Core HTTP 管道中的那些事儿
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- Spark RDD 核心总结
摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...
- MVC5+EF6+MYSQl,使用codeFirst的数据迁移
之前本人在用MVC4+EF5+MYSQL搭建自己的博客.地址:www.seesharply.com;遇到一个问题,就是采用ef的codefirst模式来编写程序,我们一般会在程序开发初期直接在glob ...
- JavaScript动画-拖拽改变元素大小
▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...
- 当web.config文件放置在共享目录下(UNC),启动IIS会提示有错误信息500.19,伴随有错误代码0x80070003和错误代码0x80070005的解决办法
最近遇到一个很有意思的使用环境,操作人员将所有的网站应用内容投放到共享存储里面,并且使用微软的SMB协议将其以CIFS的方式共享出来,使用Windows Server 2008 R2的IIS将其连接起 ...
- [Hadoop in Action] 第6章 编程实践
Hadoop程序开发的独门绝技 在本地,伪分布和全分布模式下调试程序 程序输出的完整性检查和回归测试 日志和监控 性能调优 1.开发MapReduce程序 [本地模式] 本地模式 ...