《Programming WPF》翻译 第7章 4.转换
支持高分辨率显示是WPF中的重要样式。这是被部分地支持——强调了可伸缩的向量图,而不是图像。但是,正如使用GDI+和GDI32显示的,如果可伸缩性没有完全集成到图像化构架中,独立的分辨率实际上是非常难于达到连续性的。
WPF对伸缩的支持是建立在一个基础的级别。任何用户界面中的元素都可以应用一个转换,使得伸缩和旋转任何事物都很容易。
所有的用户界面元素都有一个transform类型的RenderTransform属性。这是一个抽象的基类。从这个基类中派生的类实现了各种仿射性的转换:旋转、缩放、变形以及修剪。所有的这些都是便利的类,所有支持的转换都可以被MartrixTransform表示。这包括了一个3X3矩阵,允许使用任何仿射性的转换。
一个仿射性的转换是,样式排列在一条直线上的位置,在转换仍然在一条直线上之前,在转换之后。注意到,3-D视图转换没有保持这些直线。
示例7-44显示了RenderTransform属性的使用。
示例7-44
<TextBlock>
<TextBlock.RenderTransform>
<TransformGroup
>
<ScaleTransform ScaleX="2" ScaleY="2" />
<RotateTransform Angle="10" />
</TransformGroup>
</TextBlock.RenderTransform>
Hello,
</TextBlock>
<TextBlock>world</TextBlock>
</StackPanel>
注意到
TransformGroup在这里用来联合两种转换效果。(注意到这里旋转角度被详细指明了度数。)结果如图7-53所示。
图7-53
在标记中,你不会正常的用完整的词写出转换,如示例7-44所示,因为你可以使用字符串简写的语法,如代码7-45所示。
示例7-45
<TextBlock RenderTransform="scale 2,2 rotate 10">Hello,</TextBlock>
<TextBlock>world</TextBlock>
</StackPanel>
RenderTransform属性允许你详细指定转换的序列,这将被转换为适合的Transform对象。
RenderTransform改变元素的外观而在外观上没有任何效果。注意到图7-53中“Hello”这个TextBlock——在“world”这个块的下面——是如何运行的。这些元素都在一个水平的StackPanel中,因此你通常可以希望第二个元素完全的位于第一个元素的右边,而不是交叠在一起。然而,RenderTransform对于外观逻辑是有效可见的,因此StackPanel排列元素好像转换并不在适当的位置。
实际上,你可以经常想通过外观系统将转换考虑在内。在这种情形中,你不应该使用RenderTransform属性。代替的,你应该使用LayoutTransform属性,正如示例7-46所示。
示例7-46
<TextBlock LayoutTransform="scale 2,2 rotate 10">Hello,</TextBlock>
<TextBlock>world</TextBlock>
</StackPanel>
LayoutTransform属性在某种程度上应用了转换——这对于外观系统是可见的。正如图7-54所示,这意味着StackPanel现在为变形的文字分配了充分的空间,以及这两个元素不再是交叠的了。
图7-54
你可以应用任何数量的转换在可视化树的任意地方。图7-55显示了一个用户界面——主要区域可以被旋转和轻微地放大,但是部分内容已经被减少和以相反的方向旋转。显然地,这个特殊的示例不是十分有用,但是它确实显示了变换可以被添加到任意的位置。进一步而言,外观继续正确的工作,主要的用户界面使用Grid来排列,以及被旋转的内部内容在一个嵌入的Grid中。如果主要的窗体重新调整了大小,这两个grid都会正确地重新排列它们的内容,不会被装换的出现而混乱。
图7-55
这种对转换的彻底支持是重要的,不是以为它支持如图7-55古怪的外观,而是因为你可以依赖于转换进行一致性和可靠性的工作。
转载于:https://www.cnblogs.com/lonelyxmas/p/4962944.html
《Programming WPF》翻译 第7章 4.转换相关推荐
- 《Programming WPF》翻译 第8章 6.我们进行到哪里了?
<Programming WPF>翻译 第8章 6.我们进行到哪里了? 原文:<Programming WPF>翻译 第8章 6.我们进行到哪里了? 动画可以增强应用程序的交互 ...
- 《Programming WPF》翻译 第3章 2.处理输入
原文:<Programming WPF>翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标.键盘和手写板.同时,还有一种更高级输入方式,其可能来自快捷键 ...
- 《Programming WPF》翻译 第8章 2.Timeline
<Programming WPF>翻译 第8章 2.Timeline 原文:<Programming WPF>翻译 第8章 2.Timeline Timeline代表了时间的延 ...
- 《Programming WPF》翻译 第7章 3.笔刷和钢笔
原文:<Programming WPF>翻译 第7章 3.笔刷和钢笔 为了在屏幕上绘制一个图形,WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框.WPF提供了一些Brush类型支 ...
- 《Programming WPF》翻译 第9章 6.我们进行到哪里了?
<Programming WPF>翻译 第9章 6.我们进行到哪里了? 原文:<Programming WPF>翻译 第9章 6.我们进行到哪里了? 只有当任何内嵌控件都没有提 ...
- 《Programming WPF》翻译 目录
原文:<Programming WPF>翻译 目录 注:第1.2章我只做了笔记,没有翻译,请大家阅读时注意. 还有就是,这本书的英文版本下载:[O'Reilly] Programming ...
- 《Real-Time Rendering 4th Edition》全文翻译 - 第1章 引言
为了追赶同事(或者在公司装X),不得不开始啃RTR4(滑稽) 如题,用笨办法硬上,就是莽! 然后是概括一下每小节大致内容,最后翻译全文. 这样把全书过一遍的话应该能算认真读完了吧-- 全文翻译,逐字逐 ...
- WPF Color、String、Brush转换
WPF Color.String.Brush转换 原文:WPF Color.String.Brush转换 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- 关于对《Spring Security3》翻译 (第一章 - 第三章)
原文:http://lengyun3566.iteye.com/category/153689?page=2 翻译说明 最近阅读了<Spring Security3>一书,颇有收获(封面见 ...
最新文章
- 安卓App热补丁动态修复技术:让App像Web一样发布新版本
- 为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?
- 电商系统的积分(即金币)的设计方案
- 同步关键词synchronized
- python读取字符串按列分配后按行读出
- Python之高等数学的符号求解
- php 显示探针_UPUPW PHP探针安全版19.08.06
- C#实现百度地图瓦片下载器(更新无水印版下载地址)
- matlab Fsw,个人主页
- mysql 全文索引查询所用关键词最小长度限制
- Frank计算机基础硬件笔记
- 塔尔萨大学计算机科学专业,塔尔萨大学有哪些专业_专业排名(USNEWS美国大学排名)...
- [2017湖南集训7-8]暗牧 虚树+最短路
- liferay-protal学习1-配置开发环境
- 第一次带美瞳,突然发现眼睛大了10倍!
- 增强 扫描王 源码_OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件...
- 给 iOS 开发者的 Flutter 指南
- Redis安装(完整版)
- 月入十万的QQ空间营销引流技巧,你知道吗,??不看你会后悔!!
- java中feli删除操作_Feli的生日礼物
热门文章
- RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议
- 【ES6(2015)】Iterator
- python的ctypes模块详解数组_python ctypes结构数组
- Android逆向笔记-通过配置文件设置全屏(逆向开发与正向开发)
- C++笔记-使用std::funcional代替函数指针
- C++设计模式-开放-封闭原则基本概念与实例
- C++工作笔记-仿大佬“容器”风格
- vue 代理设置 访问图片_详解Vue源码之数据的代理访问
- 计算机将取代老师吗 英语作文,大学英语作文五篇
- java 标记_Java中的标记语句块?