2013-02-27 77 views
2

我有位於ContentPanel中的drag'n'drop圖像。在MouseLeave事件中,我得到圖像的位置,然後我需要將它對齊到我的網格。試圖用Canvas來做,但沒有任何反應。當我嘗試改變保證金時,這個位置是完全錯誤的。如何在Silverlight中設置圖像的位置

代碼:

private void MouseLeave(object sender, MouseEventArgs e) 
    { 
     Image rs = (Image)sender; 
     GeneralTransform gt = rs.TransformToVisual(ContentPanel); 
     Point offset = gt.Transform(new Point(0, 0)); 
     double controlTop = offset.Y; 
     double controlLeft = offset.X; 
     tb.Text = Convert.ToInt16(controlLeft/40).ToString(); 
     tb2.Text = Convert.ToInt16(controlTop/40).ToString(); 
     double newLeft = Convert.ToInt16(controlLeft/40)*40; 
     double newTop = Convert.ToInt16(controlTop/40)*40; 
     //rs.Margin = new Thickness(newLeft, newTop, 0, 0); 
     //((Image)ContentPanel.Children[11]).SetValue(Canvas.LeftProperty, newLeft); 
     //((Image)ContentPanel.Children[11]).SetValue(Canvas.TopProperty, newTop); 
    } 

所以,我怎麼能設置圖像的位置?

回答

0

一種方法可能是將轉換轉換應用於圖像?

類似的東西應該工作:

Image rs = (Image)sender; 
GeneralTransform gt = rs.TransformToVisual(ContentPanel); 
Point offset = gt.Transform(new Point(0, 0)); 

//create a translate transform 
TranslateTransform tt = new TranslateTransform(); 

//apply the required offset 
tt.X = offset.X; 
tt.Y = offset.Y; 

//apply the transform to the image 
rs.RenderTransform = tt; 

double controlTop = offset.Y; 
double controlLeft = offset.X; 
tb.Text = Convert.ToInt16(controlLeft/40).ToString(); 
tb2.Text = Convert.ToInt16(controlTop/40).ToString(); 
double newLeft = Convert.ToInt16(controlLeft/40) * 40; 
double newTop = Convert.ToInt16(controlTop/40) * 40; 
+0

非常感謝。 TranslateTransform使一切都變得完美。 – user2106655 2013-02-27 12:04:51

相關問題