《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古怪的外观,而是因为你可以依赖于转换进行一致性和可靠性的工作。
《Programming WPF》翻译 第7章 4.转换的更多相关文章
- 《Programming WPF》翻译 第8章 6.我们进行到哪里了?
原文:<Programming WPF>翻译 第8章 6.我们进行到哪里了? 动画可以增强应用程序的交互感.它有利于更平滑的转换--当条目出现或消失的时候.它应该,当然,被用于体验和重新着 ...
- 《Programming WPF》翻译 第8章 2.Timeline
原文:<Programming WPF>翻译 第8章 2.Timeline Timeline代表了时间的延伸.它通常还描述了一个或多个在这段时间所发生的事情.例如,在前面章节描述的动画类型 ...
- 《Programming WPF》翻译 第7章 7.我们进行到哪里了?
原文:<Programming WPF>翻译 第7章 7.我们进行到哪里了? WPF提供了一个范围的高质量生成和合成服务.一组形状元素支持各种的绘图基础.一些笔刷类型是可利用的,对于决定如 ...
- 《Programming WPF》翻译 第8章 1.动画基础
原文:<Programming WPF>翻译 第8章 1.动画基础 动画包括在一段时间内改变用户界面的某些可见的特征,如它的大小.位置或颜色.你可以做到这一点,非常困难的通过创建一个tim ...
- 《Programming WPF》翻译 第7章 5.可视化层编程
原文:<Programming WPF>翻译 第7章 5.可视化层编程 形状元素能提供一种便利的方式与图形一起工作,在一些情形中,添加表示绘图的元素到UI树中,可能是比它的价值更加麻烦.你 ...
- 《Programming WPF》翻译 第6章 4.应用程序全球化
原文:<Programming WPF>翻译 第6章 4.应用程序全球化 如果你打算发布你的应用程序到全球各地,你可能需要为不同地区的用户界面准备不同的版本.至少,这需要解决将文本翻译成适 ...
- 《Programming WPF》翻译 第5章 6.触发器
原文:<Programming WPF>翻译 第5章 6.触发器 目前为止,我们已经看到样式,作为一个Setter元素的集合.当应用一个样式时,在Setter元素中描述的设置不会无条件地应 ...
- 《Programming WPF》翻译 第5章 1.不使用样式
原文:<Programming WPF>翻译 第5章 1.不使用样式 作为一个样式如何使其在WPF使用的例子,,让我们看一下TTT简单的实现,如示例5-1. 示例5-1 <!-- W ...
- 《Programming WPF》翻译 第3章 2.处理输入
原文:<Programming WPF>翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标.键盘和手写板.同时,还有一种更高级输入方式,其可能来自快捷键 ...
随机推荐
- jquery+ajax分页
先看效果图:
- MVC 部分视图
ASP.NET MVC 里的部分视图,相当于 Web Form 里的 User Control.我们的页面往往会有许多重用的地方,可以进行封装重用. 使用部分视图有以下优点: 1. 可以简写代码. ...
- js基础例子
创建变量 var obj=value; 其中obj是变量名; value表示可能是数字,数组,函数之类的 多变量进行计算 var a1=200,b1='hello',c1=400; var d1=c1 ...
- html li标签前面添加图标三种方法
今天无聊写下这个例子,希望对初学者有帮助,代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf ...
- 为iPhone6设计自适应布局(二)
Size Classes 自适应布局的布局约束自然是好东西,但也不是万能的,有时候我们也需要使用最基本的布局,所以使用size classes将它们两者结合起来才能碰撞出更有激情的火花. 引用我上篇译 ...
- neural style论文解读
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 概述 在艺术领域,艺术家 ...
- Ubuntu 10.04下安装Qt
sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qt-creator 其中: qt4-de ...
- WndPric的使用方法
protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOS ...
- StartService与BindService
效果图 MainActivity.java package com.wangzhen.servicedemo; import com.lidroid.xutils.ViewUtils; import ...
- 树状dp ural1018
#include<stdio.h> #include<string.h> #include <iostream> using namespace std; ; in ...