2009-08-26 29 views
0

我正在寫一個應用程序,創建一個圖形'撥號',像一個時鐘。創建錶盤中的每個元素,然後以順時針方式添加到錶盤 - 想象創建一個小時1的單個元素,其中包括分鐘筆劃,數字「1」和其他裝飾,繪製它,然後重複小時2等WPF 2d圖形和'組'轉換在c#

而不是重新計算刻度盤中每個元素的繪圖角度和位置,取決於刻度盤元素的定位/旋轉位置,我可以爲每個元素創建所有線條,刻度和文本等作爲一個圖形化的「組」,然後對整個組進行旋轉變換?

感謝您的任何幫助。

回答

1

是的。使用網格,將所有其他對象和/或控件放置在該網格上,然後爲網格指定視圖變換以將其旋轉若干度。

即要將網格上的所有內容都轉換45度,它將在XAML中看起來像這樣;

<Grid x:Name="LayoutRoot" RenderTransformOrigin="0.5,0.5"> 
     <Grid.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform Angle="45"/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Grid.RenderTransform> 
     <Rectangle Fill="White" Stroke="Black" Margin="198,161,265,196"/> 
    </Grid> 

該示例只在網格上有一個矩形,但無論包含多少個對象,該概念都完全相同。

欲調整旋轉到C#,那麼你可以用以下後,將旋轉90度的網格:

RotateTransform aRT = new RotateTransform(90); 
this.LayoutRoot.RenderTransform = aRT; 
+0

您好,感謝您的答覆,你能進一步幫助? 我想知道如何在c#中完成這一切,因爲我撥號中的元素數量是可變的。 我應該爲每個新元素創建一個新的網格,然後在創建它時轉換每個網格? 此外,撥號可由用戶編輯,可以添加新元素,刪除它們等,每次撥號被修改時,都必須重新繪製 - 所以我假設每個元素都必須重新繪製。 .. – Will 2009-08-30 08:12:55

+0

- 動態創建一個新的網格 - 添加圖形,它 - 繪製 - 能夠摧毀它,並重新繪製整個錶盤 因爲我不知道有多少元素會出現在我的錶盤,因爲它們是在運行時由用戶創建的,我無法創建具有命名變量的網格,但如果網格未命名,那麼以後如何刪除它? 謝謝, 請問。 – Will 2009-08-30 08:14:00