最近几天总是下雨,真是“何处秋窗无雨声”,也“不知风雨几时休”。

好,进入正题。

弹出层有三种。

第一种是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的更多相关文章

  1. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  2. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  3. 【Win 10 应用开发】导入.pfx证书

    这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...

  4. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...

  5. 【Win 10应用开发】认识一下UAP项目

    Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...

  6. 【Win 10 应用开发】在代码中加载文本资源

    记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...

  7. 【Win 10 应用开发】UI Composition 札记(一):视图框架的实现

    在开始今天的内容之前,老周先说一个问题,这个问题记得以前有人提过的. 设置 Windows.ApplicationModel.Core.CoreApplicationView.TitleBar.Ext ...

  8. 【Win 10应用开发】延迟共享

    延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...

  9. 【Win 10 应用开发】Toast通知激活应用——前台&后台

    老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...

随机推荐

  1. ASP.NET Aries 入门开发教程9:业务表单的开发

    前言: 经过前面那么多篇的列表的介绍,终于到了大伙期待的表单开发了. 也是本系列的最后一篇文章了! 1:表单页面的权限设置与继承 对于表单页面,权限的设置有两种: 1:你可以选择添加菜单(设置为不显示 ...

  2. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  3. CodeSimth - .Net Framework Data Provider 可能没有安装。解决方法

    今天想使用CodeSimth生成一个sqlite数据库的模板.当添加添加数据库的时候发现: .Net Framework Data Provider 可能没有安装. 下面找到官方的文档说明: SQLi ...

  4. Carousel 旋转画廊特效的疑难杂症

    疑难杂症 该画廊特效的特点就是前后元素有层级关系. 我想很多人应该看过或者用过这个插件carousel.js,网上也有相关的教程.不知道这个插件的原型是哪个,有知道的朋友可以告诉我. 该插件相对完美, ...

  5. .net windows Kafka 安装与使用入门(入门笔记)

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  6. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. 玩转spring boot——AOP与表单验证

    AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...

  8. 6_Win7下Chrome主页被流氓网站hao123.com劫持后的解决方法。

    今天安装了一个PDF阅读器,免费的,你懂的,结果自己安装的时候没有将默认的选项取消,就被hao123流氓网站劫持啦. 说实话某免费PDF阅读器还算好的,有一个可以供你选择的项.不想某些软件直接就默认选 ...

  9. android计算每个目录剩余空间丶总空间以及SD卡剩余空间

    ublic class MemorySpaceCheck { /** * 计算剩余空间 * @param path * @return */ public static String getAvail ...

  10. 跟着老男孩教育学Python开发【第五篇】:模块

    递归的案例:阶乘 1*2*3*4*5*6*7- def func(num):     if num == 1:         return 1     return num * func(num - ...