2012-10-08 34 views
0

我想在我的畫布控件和每個控件中動態添加一些圖像或控件,以便獲取其手勢事件。我如何得到那將是最好的方法。在WP7中動態添加控件和手勢監聽器

void AddText() 
     { 
      TextBlock name = new TextBlock(); 
      name.Text = "This is text " + Count; 
      Random rnd1 = new Random(); 
      name.Width = rnd1.Next(0, 400); 
      name.Height = rnd1.Next(0, 800); 
      var gl = GestureService.GetGestureListener(name); 
      gl.Tap += new EventHandler<GestureEventArgs>(GestureListener_Tap); 
      gl.Hold += new EventHandler<GestureEventArgs>(GestureListener_Hold); 
      canvas1.Children.Add(name); 
     } 


private void GestureListener_Tap(object sender, GestureEventArgs e) 
{ 
    MessageBox.Show("I Am Tapped"); 
} 

private void GestureListener_Hold(object sender, GestureEventArgs e) 
{ 
    MessageBox.Show("I Am Holded"); 
} 

但是這樣我的所有控件都放在同一個地方,即使我使用了它的寬度和高度的隨機函數。還有其他的一些事情,當我點擊我用這種方式創建的任何文本塊。它調用所有的手勢事件。

回答

1

與StackPanel不同,Canvas控件的行爲類似於HTML/CSS中的絕對定位。每個元素將在頁面上被賦予它自己的特定位置。隨着元素絕對定位,他們不會調整。元素將重疊,而不會對其鄰居產生任何與位置相關的影響。

<Canvas> 
    <Rectangle Fill="Red" Width="100" Height="100" Canvas.Top="100" Canvas.Left="100" /> 
    <Rectangle Fill="Orange" Width="100" Height="100" Canvas.Top="100" Canvas.Left="200" /> 
    <Rectangle Fill="Green" Width="100" Height="100" Canvas.Top="200" Canvas.Left="100" /> 
    <Rectangle Fill="Blue" Width="100" Height="100" Canvas.Top="200" Canvas.Left="200" /> 
</Canvas> 

對於Canvas中的每個元素,您需要指定Canvas.Top和Canvas.Left屬性。省略這些值將導致元素位於Canvas的左上角,位置爲0,0。

所以,你需要提供Left和Top屬性,如下圖所示,

Canvas.SetLeft(name, 50); 
Canvas.SetTop(name, 100);