2011-01-24 21 views
0

我想要做的就是將我的UserControl添加到網格上的特定點。 現在我可以在添加到Gird後使用RenderTransform來完成此操作,但是我不認爲在發生這種情況時已將它們添加到VisualTree中。在添加到網格後立即執行RenderTransform會導致問題,因爲元素尚未添加到VisualTree

有沒有一種方法可以在我的變換之前等待UI線程完成?任何方式使用像素添加項目到網格?即從左邊40px和從頂部40px?

我使用的代碼如下....

grid.Children.Add(temp); 
TranslateTransform transform = new TranslateTransform(-oldPosition.X+temp.posx, -oldPosition.Y+temp.posy);    
temp.RenderTransform = transform; 

oldPosition是它被添加到網格中第一個地方,一個點。 temp.posx和temp.posy是我想要UserControl的x和y座標。

另請注意,我沒有在網格上設置任何行和列,因此使用網格的原因是我可以將應用程序最大化並且網格將填充整個屏幕,但Canvas似乎並不做這個。

回答

0

你就不能這樣做:

grid.Children.Add(temp); 
Grid.SetColumn(textBlock, Y); 
Grid.SetRow(textBlock, X); 
+0

我已經試過了確切的代碼,但仍控制最終權的中間屏幕。我認爲這是因爲我沒有爲網格設置任何行或列,是否有辦法做到這一點,所以我仍然可以擁有全屏應用程序?感謝您的回覆! – christoefar 2011-01-24 16:24:55

0

我相信UpdateLayout將做到這一點:

grid.Children.Add(temp); 
grid.UpdateLayout(); 
TranslateTransform transform = new TranslateTransform(-oldPosition.X+temp.posx, -oldPosition.Y+temp.posy); 
temp.RenderTransform = transform; 
+0

這有助於情況! :)我現在只能使用一個按鈕添加控件並定位它們。我認爲沒有辦法從構造函數中調用這個方法,這樣我就不必按任何按鈕了?所以它會在啓動時添加和定位。謝謝! – christoefar 2011-01-24 17:31:15