2016-04-21 34 views
-1

从主窗口构造函数中:设置LayoutTransform到RotateTransform用于在Canvas元素产生意想不到的效果

for(var i = 0; i <5; i++) 
     { 
      var button = new Button {}; 
      button.LayoutTransform = new RotateTransform(i * 10); 
      button.Width = 300; 
      button.Height = 300; 
      TempCanvas.Children.Add(button); 

     } 

这将产生以下:

enter image description here

请有人可以解释为什么发生这种情况。我期待5个按钮在同一点上旋转。

我不想RenderTransform,因为我将渲染的图形将绘制在父级之外,并未反映在度量中。

+0

因为它的布局转换,它必须适合在画布上,所以不是外出,它翻译,直到它适合。我认为。不完全确定。但是使用RenderTransform并手动移动对象(应用变换之前的位置)应该修复它。 –

+0

https://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransformorigin(v=vs.110).aspx 可能是你正在寻找的东西。 – Skami

+0

斯卡米 - 该属性不适用于布局转换 – user487779

回答

1

画布是问题,不同于其他包含它不受其物理尺寸约束,它向四面八方延伸到无限。因此它的旋转原点不是canvas.width/2 by canvas.height/2。

如果您在网格或docksetnel中重复您的代码,您将获得所需的结果。

+0

感谢您的帮助。 – user487779

+1

这个答案不太对。特别是,其他类型的容器控件不会自动将原始轮廓放置在{width/2,height/2}处,但是它们_do_(不像'Canvas')执行额外的布局,可能涉及拉伸和居中子对象。这种额外的布局可能会导致转换设置上的模拟差异,因为它们会在事实之后应用自己的转换。几乎可以肯定的是,OP可以通过'Canvas'工作,但他们需要提供更多的细节供人们回答这个问题。 –

+0

每天学习新东西:)干杯彼得 –

0

你想是这样的:

Render trnas

代码:

for (var i = 0; i < 5; i++) 
     { 
      var button = new Button { }; 
      //button.LayoutTransform = new RotateTransform(i * 10); 
      button.RenderTransform = new RotateTransform(i * 10); 
      button.Width = 300; 
      button.Height = 300; 
      button.Margin = new Thickness(200, 0, 0, 0); 
      TempCanvas.Children.Add(button); 

     } 
+0

谢谢Kylo但没有。我想使用LayoutTransform。 – user487779

相关问题