我想在我的画布控件中动态添加一些图像或控件,并为每个控件添加其手势事件。我如何才能得到最好的方法。
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");
}
但是通过这种方式我的所有控件都被放置在同一个地方,即使我使用随机函数来获得宽度和高度。当我点击我用这种方式创建的任何文本块时,还有其他的东西。它调用所有手势事件。
答案 0 :(得分: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属性。省略这些值将导致元素位于“画布”的左上角,位置为0,0。
所以你需要提供如下所示的Left和Top属性,
Canvas.SetLeft(name, 50);
Canvas.SetTop(name, 100);