程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 《Programming WPF》翻譯 第7章 4.轉換

《Programming WPF》翻譯 第7章 4.轉換

編輯:關於.NET

支持高分辨率顯示是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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved