Welcome

首页 / 软件开发 / .NET编程技术 / 《Programming WPF》翻译 第7章 4.转换

《Programming WPF》翻译 第7章 4.转换2011-09-16 博客园 包建强支持高分辨率显示是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排列元素好像转换并不在适当的位置。