我有一個UIElement,它對它進行了各種變換(縮放和平移)。獲取變換後的元素位置
有沒有辦法在轉換後獲得UIElement的位置?我試過GetValue(Canvas.TopProperty)
,但它不會從它被加載的內容改變。
我必須錯過一些明顯的東西,但不知道是什麼。 (我正在使用silverlight)
我有一個UIElement,它對它進行了各種變換(縮放和平移)。獲取變換後的元素位置
有沒有辦法在轉換後獲得UIElement的位置?我試過GetValue(Canvas.TopProperty)
,但它不會從它被加載的內容改變。
我必須錯過一些明顯的東西,但不知道是什麼。 (我正在使用silverlight)
這是一個有點不直觀要做到這一點,但它可以做到的。這是一個兩步過程。首先,你要什麼用TransformToVisual
功能(from MSDN):
返回可用於從的UIElement的座標轉換爲指定對象的變換對象。
TransformToVisual
將產生GeneralTransform
將從任何的UIElement到任何其他的UIElement(假定它們都在相同的視覺樹存在)執行變換。這聽起來像你想要的是從RootVisual
轉變。
var transform = Application.RootVisual.TransformToVisual(myUiElement);
的transform
對象現在是可用於以相同的方式被myUiElement
相對於RootVisual
下一步轉化爲變換什麼是使用變換來變換點的一般轉變。
var myUiElementPosition = transform.Transform(new Point(0,0));
的myUiElementPosition
現在已轉換,應該是UIElement
你要找的位置Point
。使用new Point(0,0)
是因爲我假設你想要給出相對於RootVisual
左上角的位置。
編輯:
好的這個怎麼樣?
myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)
和
myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)
嘗試使用這種方法:
var offset = Application.RootVisual.TransformToVisual(myObject)
.Transform(new Point(0,0));
我不太知道如何使用這個。此刻,我正在使用myObjectTransform.TranslateX + = 2.這會將對象移動2幀。我在哪裏可以使用GeneralTransform方法?謝謝 – Skoder 2011-03-10 22:35:56
@Skoder我誤解了你的設置。你可以嘗試編輯的代碼片段嗎? – 2011-03-10 22:47:35
我得到正確的值,但是值與元素的位置不一樣。該值僅相對於變換而不是對象的位置。所以變換的位置值被更新,但我需要元素的位置值。 – Skoder 2011-03-10 22:56:04