Динамическое добавление элементов управления и прослушивателя жестов в 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");
}

Но таким образом все мои элементы управления размещаются в одном месте, даже если я использовал случайную функцию для их ширины и высоты. И другое, когда я нажимаю на любой текстовый блок, созданный таким образом. Он вызывает все события жестов.


person Arslan Pervaiz    schedule 08.10.2012    source источник


Ответы (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.Top и Canvas.Left. Пропуск этих значений приведет к тому, что ваши элементы будут расположены в верхнем левом углу холста в позиции 0,0.

Итак, вам нужно указать свойства Left и Top, как показано ниже:

Canvas.SetLeft(name, 50);
Canvas.SetTop(name, 100);
person nkchandra    schedule 08.10.2012