《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古怪的外觀,而是因為你可以依賴于轉換進行一致性和可靠性的工作。
轉載于:https://www.cnblogs.com/lonelyxmas/p/4962944.html
總結
以上是生活随笔為你收集整理的《Programming WPF》翻译 第7章 4.转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第九章 单处理器调度
- 下一篇: TestNG学习