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 に答える