读《深入理解Windows Phone 8.1 UI控件编程》1.4.3 框架的应用示例:自定义弹出窗口有感
前些天买了园子里林政老师的两本 WP8.1 的书籍。毕竟想要学得深入的话,还是得弄本书跟着前辈走的。
今天读到 1.4.3 节——框架的应用示例:自定义弹出窗口这一小节。总的来说,就是弄一个像 MessageDialog 的,但是又要具有能定义 Dialog 内的按钮、文本等等的功能(例如颜色、字体大小这些)。(先不说 ContentDialog ,即内容对话框能大部分做到)
原理是使用了一个 Popup 控件作为弹出窗口的容器,将 Popup 的 Child 属性赋值为弹出窗口的实例。在书中,弹出窗口的类为模板化控件,名叫 MyMessage,Template 包含了一个 Grid,然后 Grid 中又包含了一个 Rectangle 和一个 Border,Rectangle 用作半透明处理(相当于 Web 中模态窗口的背景部分半透明灰黑色),Border 里套了一个 StackPanel,StackPanel 里存放弹出窗口的内容。(感觉这个 StackPanel 完全是多余的)
效果(480*800中):
各层的解释:
相应的代码:
<ControlTemplate TargetType="local:MyMessage">
<Grid VerticalAlignment="Stretch">
<Rectangle x:Name="backgroundRect" Grid.Row="0" Fill="Black" Opacity="0.7"/>
<Border
VerticalAlignment="Top"
BorderThickness="3"
BorderBrush="Black">
<StackPanel Margin="0">
<ContentPresenter x:Name="body"/>
</StackPanel>
</Border>
</Grid>
</ControlTemplate>
然后为了在弹出窗口显示的时候,隐藏掉 Page 可能存在的 BottomBar,使用 Window.Current.Content as Frame 获取当前的框架,在通过遍历当前框架的可视树获取 Page 实例,最后在显示的时候缓存 BottomBar 的状态,隐藏弹出窗口的时候,再恢复 Page 的 BottomBar 的状态。
也就是说,获取当前框架,遍历可视树获取 Page 都是为了 BottomBar 的隐藏。(这点弄了很久才想明白,一直在想,Popup 又不需要挂载在 Page 上,那为什么要获取 Page 呢-_-|||)
最后说一个我发现的这种方式的一个缺点,由于 Popup 的宽度没办法绑定到当前窗口的宽度(WP 中可以看成跟屏幕宽度,因为只有一个窗口),所以只能硬设定(在例子里是设定这个模板化控件的宽度,因为这样就可以撑开 Popup 了)。于是乎,在屏幕方向转变的时候。。。
右边空了一大截……这跟 MessageDialog 说好的不一样嘛(;´Д`)
另外即使不选择屏幕,在1080p 6inch的情况下:
也会空出一截出来。
呃,只能说这例子不合适么?这里不是说林政老师写得不好。(因为我自己也想不出框架的应用-_-|||)
以上是自己个人的分析,如有不足,请林政老师及园子里的各位指出。
读《深入理解Windows Phone 8.1 UI控件编程》1.4.3 框架的应用示例:自定义弹出窗口有感的更多相关文章
- 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架
<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...
- [WP8.1UI控件编程]Windows Phone理解和运用ItemTemplate、ContentTemplate和DataTemplate
2.2.5 ItemTemplate.ContentTemplate和DataTemplate 在理解ItemTemplate.ContentTemplate和DataTemplate的关系的之前,我 ...
- [WP8.1UI控件编程]Windows Phone XAML页面的编译
1.1.2 XAML页面的编译 Windows Phone的应用程序项目会通过Visual Studio完成XAML页面的编译,在程序运行时会通过直接链接操作加载和解析XAML,将XAML和过程式代码 ...
- [WP8.1UI控件编程]Windows Phone大数据量网络图片列表的异步加载和内存优化
11.2.4 大数据量网络图片列表的异步加载和内存优化 虚拟化技术可以让Windows Phone上的大数据量列表不必担心会一次性加载所有的数据,保证了UI的流程性.对于虚拟化的技术,我们不仅仅只是依 ...
- [WP8.1UI控件编程]Windows Phone VirtualizingStackPanel、ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件
11.2.2 VirtualizingStackPanel.ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件 VirtualizingStackPanel.ItemsSta ...
- [WP8.1UI控件编程]Windows Phone动画方案的选择
8.1 动画方案的选择 Windows Phone的动画实现方式有线性插值动画(3种类型).关键祯动画(4种类型)和基于帧动画,甚至还有定时器动画,然后动画所改变的UI元素属性可以是普通的UI元素属性 ...
- [WP8.1UI控件编程]Windows Phone自定义布局规则
3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是 ...
- 重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup
原文:重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter ...
- 【UI控件总结】【UIScrollView】深入理解篇UIScrollerView
[UI控件总结][UIScrollView]基本方法+基本描述 接下来,我整理一下自己的思路,深入理解 UIScrollView 基本点 : 1 . UIScrollView 是一个UIView. 每 ...
随机推荐
- nginx的Mainline version、Stable version、Legacy version
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- 深入浅出parallelStream
援引:http://blog.csdn.net/u011001723/article/details/52794455 感谢作者的分享!感谢作者为JDK8的学习所做的努力. about Stream ...
- vs2015安装出问题
win7系统需要更新serverpage1包,更新完就ok了,ie不用升级到ie10
- scrollLeft滚动(用animate替代)
原: let checkedLeft1 = $('#dateBox').find('.checked').position().left let checkedLeft2 = $('#dateBox' ...
- Java开发微信公众号
1.https://natapp.cn/ 2.选择和自己电脑相对应的系统下载 (以windows为例)下载并解压在磁盘中(记住解压文件的位置 例如:E:\dailysoftware\ngrok_wi ...
- 使用bcp工具对boost库裁剪
有些时候,我们需要通过源代码来发布我们的产品,在使用了CI工具之后,一般我们要求每天对源码进行构建,以防止代码不可用了还不自知.如果我们使用了Boost库,我们就需要在构建的过程中将Boost同时构建 ...
- Step1-有序顺序表
#include<stdio.h> #define N 100 typedef struct jcb{ ]; int arrtime; int reqtime; }jcb; jcb job ...
- [转]微信公众平台(测试接口)开发前的准备工作(转载自walkingmanc的专栏)
本文转自:http://blog.csdn.net/jiangweicpu/article/details/21228949 http://blog.csdn.net/walkingmanc/arti ...
- attempt to create delete event with null entity
解决办法:删除之前判断是否为空 if(Object != null){ session.delete(Object); }
- 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)
Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...