0

我想在我的画布控件中动态添加一些图像或控件,并且对于每个控件我想要获取其手势事件。我将如何得到最好的方法。

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");
}

但是通过这种方式,我的所有控件都放在同一个地方,即使我使用随机函数来控制它们的宽度和高度。当我点击我用这种方式创建的任何文本块时,还有其他事情。它调用所有手势事件。

4

1 回答 1

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);
于 2012-10-08T10:38:25.967 回答