《Programming WPF》翻译 第7章 4.转换
支持高分辨率顯示是WPF中的重要樣式。這是被部分地支持——強(qiáng)調(diào)了可伸縮的向量圖,而不是圖像。但是,正如使用GDI+和GDI32顯示的,如果可伸縮性沒有完全集成到圖像化構(gòu)架中,獨(dú)立的分辨率實(shí)際上是非常難于達(dá)到連續(xù)性的。
WPF對伸縮的支持是建立在一個(gè)基礎(chǔ)的級別。任何用戶界面中的元素都可以應(yīng)用一個(gè)轉(zhuǎn)換,使得伸縮和旋轉(zhuǎn)任何事物都很容易。
所有的用戶界面元素都有一個(gè)transform類型的RenderTransform屬性。這是一個(gè)抽象的基類。從這個(gè)基類中派生的類實(shí)現(xiàn)了各種仿射性的轉(zhuǎn)換:旋轉(zhuǎn)、縮放、變形以及修剪。所有的這些都是便利的類,所有支持的轉(zhuǎn)換都可以被MartrixTransform表示。這包括了一個(gè)3X3矩陣,允許使用任何仿射性的轉(zhuǎn)換。
一個(gè)仿射性的轉(zhuǎn)換是,樣式排列在一條直線上的位置,在轉(zhuǎn)換仍然在一條直線上之前,在轉(zhuǎn)換之后。注意到,3-D視圖轉(zhuǎn)換沒有保持這些直線。
示例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在這里用來聯(lián)合兩種轉(zhuǎn)換效果。(注意到這里旋轉(zhuǎn)角度被詳細(xì)指明了度數(shù)。)結(jié)果如圖7-53所示。圖7-53
在標(biāo)記中,你不會正常的用完整的詞寫出轉(zhuǎn)換,如示例7-44所示,因?yàn)槟憧梢允褂米址唽懙恼Z法,如代碼7-45所示。
示例7-45
?
<StackPanel?Orientation="Horizontal">????<TextBlock?RenderTransform="scale?2,2?rotate?10">Hello,</TextBlock>
????<TextBlock>world</TextBlock>
</StackPanel>
RenderTransform屬性允許你詳細(xì)指定轉(zhuǎn)換的序列,這將被轉(zhuǎn)換為適合的Transform對象。
RenderTransform改變元素的外觀而在外觀上沒有任何效果。注意到圖7-53中“Hello”這個(gè)TextBlock——在“world”這個(gè)塊的下面——是如何運(yùn)行的。這些元素都在一個(gè)水平的StackPanel中,因此你通常可以希望第二個(gè)元素完全的位于第一個(gè)元素的右邊,而不是交疊在一起。然而,RenderTransform對于外觀邏輯是有效可見的,因此StackPanel排列元素好像轉(zhuǎn)換并不在適當(dāng)?shù)奈恢谩?/span>
實(shí)際上,你可以經(jīng)常想通過外觀系統(tǒng)將轉(zhuǎn)換考慮在內(nèi)。在這種情形中,你不應(yīng)該使用RenderTransform屬性。代替的,你應(yīng)該使用LayoutTransform屬性,正如示例7-46所示。
示例7-46
?
<StackPanel?Orientation="Horizontal"?Margin="10"????<TextBlock?LayoutTransform="scale?2,2?rotate?10">Hello,</TextBlock>
????<TextBlock>world</TextBlock>
</StackPanel>
LayoutTransform屬性在某種程度上應(yīng)用了轉(zhuǎn)換——這對于外觀系統(tǒng)是可見的。正如圖7-54所示,這意味著StackPanel現(xiàn)在為變形的文字分配了充分的空間,以及這兩個(gè)元素不再是交疊的了。
圖7-54
你可以應(yīng)用任何數(shù)量的轉(zhuǎn)換在可視化樹的任意地方。圖7-55顯示了一個(gè)用戶界面——主要區(qū)域可以被旋轉(zhuǎn)和輕微地放大,但是部分內(nèi)容已經(jīng)被減少和以相反的方向旋轉(zhuǎn)。顯然地,這個(gè)特殊的示例不是十分有用,但是它確實(shí)顯示了變換可以被添加到任意的位置。進(jìn)一步而言,外觀繼續(xù)正確的工作,主要的用戶界面使用Grid來排列,以及被旋轉(zhuǎn)的內(nèi)部內(nèi)容在一個(gè)嵌入的Grid中。如果主要的窗體重新調(diào)整了大小,這兩個(gè)grid都會正確地重新排列它們的內(nèi)容,不會被裝換的出現(xiàn)而混亂。
圖7-55
這種對轉(zhuǎn)換的徹底支持是重要的,不是以為它支持如圖7-55古怪的外觀,而是因?yàn)槟憧梢砸蕾囉谵D(zhuǎn)換進(jìn)行一致性和可靠性的工作。
轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4962944.html
總結(jié)
以上是生活随笔為你收集整理的《Programming WPF》翻译 第7章 4.转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第九章 单处理器调度
- 下一篇: 我对 ASP.NET Web API 的