2009-08-26 30 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