2011-05-21 68 views
1

我有幾個從面板類繼承的cutom控件的畫布,在運行時用rendertransform =(.5,.5)動態添加到它。但是當應用平移變換(50,50)並旋轉100度時,它不會在它的位置上旋轉,它會以50的半徑旋轉,爲什麼? 我做錯了什麼嗎?對象在wpf中轉換轉換後不能正確旋轉?

回答

6

轉換不可交換,您應該在應用轉換之前應用轉動。

通常你有一個TransformGroup,那麼你可以改變它的孩子的順序,如果這不是一個選項,因爲某些變換是從父母「繼承」的,你可以使用它們的逆變換先前變換(在這種情況下的應該將目標移回原點的翻譯),然後您可以將其旋轉到原位,然後再次應用原始變換。


的文檔是你的朋友,這裏是我能爲TransformGroups發現:

在複合轉型,各個轉換的順序很重要。例如,如果首先旋轉,然後縮放然後翻譯,則會得到與先翻譯,然後旋轉然後縮放不同的結果。順序顯着的一個原因是像旋轉和縮放這樣的變換是相對於座標系的原點完成的。縮放以原點爲中心的對象會產生與縮放從原點移開的對象不同的結果。類似地,旋轉以原點爲中心的對象會產生與旋轉離開原點的對象不同的結果。

+0

我將TransformGroup中的兩個變換應用到RenderTransform – Code0987 2011-05-21 18:57:52

+0

然後更改順序,也可以看到我編輯的答案。 – 2011-05-21 18:58:29

+0

感謝它的工作,當我把rotatetransform移到頂端。 – Code0987 2011-05-21 19:05:42

0

如果它以50的半徑旋轉,這是因爲你的原點是錯誤的。

在這種情況下,只需將CenterXCenterY屬性都設置爲50即可更改您的RotateTransform的原點。

+0

是沒有效果,因爲我申請rendertransform =(.5,.5) – Code0987 2011-05-21 19:15:51

+0

你是否設置了CenterX和CenterY屬性? – Gabe 2011-05-21 19:22:47

+0

什麼都沒有。它適用於rendertransformorigin =(.5,.5)時 – Code0987 2011-05-21 19:30:33