2016-04-21 86 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

相關問題