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

简介: 原文:《Programming WPF》翻译 第7章 4.转换支持高分辨率显示是WPF中的重要样式。这是被部分地支持——强调了可伸缩的向量图,而不是图像。但是,正如使用GDI+和GDI32显示的,如果可伸缩性没有完全集成到图像化构架中,独立的分辨率实际上是非常难于达到连续性的。
原文: 《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古怪的外观,而是因为你可以依赖于转换进行一致性和可靠性的工作。

目录
相关文章
|
1月前
|
文字识别 C# 开发者
WPF开源的一款免费、开箱即用的翻译、OCR工具
WPF开源的一款免费、开箱即用的翻译、OCR工具
|
C#
【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?
原文:【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cf884a91-c135-447d-b16b-214d2d9e9972 有时有些特殊的程序需要这样处理。
949 0
|
C#
【msdn wpf forum翻译】获取当前窗口焦点所在的元素
原文:【msdn wpf forum翻译】获取当前窗口焦点所在的元素原文地址: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/6bd7a03a-f0b4-42df-a7f2-5182cf003cb0 Bialgous回答:IInputElement focusedElement = FocusManager.
935 0
|
C#
【msdn wpf forum翻译】TextBlock等类型的默认样式(implicit style)为何有时不起作用?
原文:【msdn wpf forum翻译】TextBlock等类型的默认样式(implicit style)为何有时不起作用?原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/148e95c6-6fb5-4399-8a56-4...
945 0
|
C#
【msdn wpf forum翻译】TextBox中文本 中对齐 的方法
原文:【msdn wpf forum翻译】TextBox中文本 中对齐 的方法原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/49864e35-1dbf-4292-a361-93f1a8400558 问题:TextBox中文本中对齐,使用 TextBox.HorizontalContentAlignment="Center"行不通(TextBox.VerticalContentAlignment="Center"则会起到预期的作用。
1196 0
|
C#
《Programming WPF》翻译 目录
原文:《Programming WPF》翻译 目录 注:第1、2章我只做了笔记,没有翻译,请大家阅读时注意。 还有就是,这本书的英文版本下载:[O'Reilly] Programming Windows Presentation Foundation (2005) - BBL 以下是这本书的目录: 1.
1004 0
|
C# 前端开发 API
《Programming WPF》翻译 第3章 1.什么是控件
原文:《Programming WPF》翻译 第3章 1.什么是控件 对于一个应用程序而言,控件是搭建用户界面的积木。它们具备交互式的特征,例如文本框、按钮以及列表框。尽管如此,WPF还有点不寻常,在于其并不直接地依赖其外观。
789 0
|
数据可视化 前端开发 .NET
《Programming WPF》翻译 第3章 2.处理输入
原文:《Programming WPF》翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标、键盘和手写板。同时,还有一种更高级输入方式,其可能来自快捷键、工具栏的按钮、菜单项。
1154 0
|
数据可视化 C# 数据安全/隐私保护
《Programming WPF》翻译 第3章 3.内嵌控件
原文:《Programming WPF》翻译 第3章 3.内嵌控件 WPF提供了一系列内嵌控件。其中大多数符合标准的你已经熟悉的Windows控件类型。注意到没有一个是包装在旧的Win32控件外面的控件。
1295 0