《Programming WPF》翻译 第7章 4.转换
原文:《Programming WPF》翻译 第7章 4.转换

支持高分辨率显示是WPF中的重要样式。这是被部分地支持——强调了可伸缩的向量图,而不是图像。但是,正如使用GDI+和GDI32显示的,如果可伸缩性没有完全集成到图像化构架中,独立的分辨率实际上是非常难于达到连续性的。

WPF对伸缩的支持是建立在一个基础的级别。任何用户界面中的元素都可以应用一个转换,使得伸缩和旋转任何事物都很容易。

所有的用户界面元素都有一个transform类型的RenderTransform属性。这是一个抽象的基类。从这个基类中派生的类实现了各种仿射性的转换:旋转、缩放、变形以及修剪。所有的这些都是便利的类,所有支持的转换都可以被MartrixTransform表示。这包括了一个3X3矩阵,允许使用任何仿射性的转换。

一个仿射性的转换是,样式排列在一条直线上的位置,在转换仍然在一条直线上之前,在转换之后。注意到,3-D视图转换没有保持这些直线。

示例7-44显示了RenderTransform属性的使用。

示例7-44

<StackPanel Orientation="Horizontal">
    <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

<StackPanel Orientation="Horizontal">
    <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

<StackPanel Orientation="Horizontal" Margin="10"
    <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古怪的外观,而是因为你可以依赖于转换进行一致性和可靠性的工作。

posted on 2015-11-13 18:03 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4962944.html

《Programming WPF》翻译 第7章 4.转换相关推荐

  1. 《Programming WPF》翻译 第8章 6.我们进行到哪里了?

    <Programming WPF>翻译 第8章 6.我们进行到哪里了? 原文:<Programming WPF>翻译 第8章 6.我们进行到哪里了? 动画可以增强应用程序的交互 ...

  2. 《Programming WPF》翻译 第3章 2.处理输入

    原文:<Programming WPF>翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标.键盘和手写板.同时,还有一种更高级输入方式,其可能来自快捷键 ...

  3. 《Programming WPF》翻译 第8章 2.Timeline

    <Programming WPF>翻译 第8章 2.Timeline 原文:<Programming WPF>翻译 第8章 2.Timeline Timeline代表了时间的延 ...

  4. 《Programming WPF》翻译 第7章 3.笔刷和钢笔

    原文:<Programming WPF>翻译 第7章 3.笔刷和钢笔 为了在屏幕上绘制一个图形,WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框.WPF提供了一些Brush类型支 ...

  5. 《Programming WPF》翻译 第9章 6.我们进行到哪里了?

    <Programming WPF>翻译 第9章 6.我们进行到哪里了? 原文:<Programming WPF>翻译 第9章 6.我们进行到哪里了? 只有当任何内嵌控件都没有提 ...

  6. 《Programming WPF》翻译 目录

    原文:<Programming WPF>翻译 目录 注:第1.2章我只做了笔记,没有翻译,请大家阅读时注意. 还有就是,这本书的英文版本下载:[O'Reilly] Programming ...

  7. 《Real-Time Rendering 4th Edition》全文翻译 - 第1章 引言

    为了追赶同事(或者在公司装X),不得不开始啃RTR4(滑稽) 如题,用笨办法硬上,就是莽! 然后是概括一下每小节大致内容,最后翻译全文. 这样把全书过一遍的话应该能算认真读完了吧-- 全文翻译,逐字逐 ...

  8. WPF Color、String、Brush转换

    WPF Color.String.Brush转换 原文:WPF Color.String.Brush转换 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. 关于对《Spring Security3》翻译 (第一章 - 第三章)

    原文:http://lengyun3566.iteye.com/category/153689?page=2 翻译说明 最近阅读了<Spring Security3>一书,颇有收获(封面见 ...

最新文章

  1. 安卓App热补丁动态修复技术:让App像Web一样发布新版本
  2. 为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?
  3. 电商系统的积分(即金币)的设计方案
  4. 同步关键词synchronized
  5. python读取字符串按列分配后按行读出
  6. Python之高等数学的符号求解
  7. php 显示探针_UPUPW PHP探针安全版19.08.06
  8. C#实现百度地图瓦片下载器(更新无水印版下载地址)
  9. matlab Fsw,个人主页
  10. mysql 全文索引查询所用关键词最小长度限制
  11. Frank计算机基础硬件笔记
  12. 塔尔萨大学计算机科学专业,塔尔萨大学有哪些专业_专业排名(USNEWS美国大学排名)...
  13. [2017湖南集训7-8]暗牧 虚树+最短路
  14. liferay-protal学习1-配置开发环境
  15. 第一次带美瞳,突然发现眼睛大了10倍!
  16. 增强 扫描王 源码_OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件...
  17. 给 iOS 开发者的 Flutter 指南
  18. Redis安装(完整版)
  19. 月入十万的QQ空间营销引流技巧,你知道吗,??不看你会后悔!!
  20. java中feli删除操作_Feli的生日礼物

热门文章

  1. RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议
  2. 【ES6(2015)】Iterator
  3. python的ctypes模块详解数组_python ctypes结构数组
  4. Android逆向笔记-通过配置文件设置全屏(逆向开发与正向开发)
  5. C++笔记-使用std::funcional代替函数指针
  6. C++设计模式-开放-封闭原则基本概念与实例
  7. C++工作笔记-仿大佬“容器”风格
  8. vue 代理设置 访问图片_详解Vue源码之数据的代理访问
  9. 计算机将取代老师吗 英语作文,大学英语作文五篇
  10. java 标记_Java中的标记语句块?