• Domingo 22 de Diciembre de 2024, 20:30

Autor Tema:  Eventos del stackpanel en WPF, Visual Studio  (Leído 1694 veces)

Mat_03

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Eventos del stackpanel en WPF, Visual Studio
« en: Domingo 22 de Mayo de 2011, 08:10 »
0
Tengo un problema con un stackpanel. Tengo una lista de obejtos que leo desde un archivo, y luego las agrego a mi stackpanel, como en el siguiente código:

void home_ListChanged()
    {
      int index = 0;

      while (index < home.List.Count)
      {
        Label l = new Label();
        Image image = new Image();
        string id = ((Furniture)home.List.ElementAt(index)).Id;
        image.Source = new BitmapImage(new Uri(@"/Frontend;component/Images/" + id + ".png", UriKind.Relative));
        image.Width = home.List.ElementAt(index).Width;
        image.Height = home.List.ElementAt(index).Height;
        canvas.Children.Add(image);
        l.Content = id;
        mappingIda.Add(((Furniture)home.List.ElementAt(index)), image);
        stackPanel.Children.Add(l);
        index++;
      }
    }


La cosa es que después quiero acceder a los objetos, los labels, que tengo en mi stackpanel a través de un evento. Es decir, que cuando haga click en un label de mi stack panel, se genere un evento, del que pueda obtener cuál label se seleccionó.
Hasta ahora no he podido saber qué label es al que se le ha hecho click. No sé cómo poder obtener esto.

Gracias.

SERware

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Eventos del stackpanel en WPF, Visual Studio
« Respuesta #1 en: Jueves 2 de Junio de 2011, 21:51 »
0
Hola,

Çomo puedes comprobar, el control Label no tiene evento Click, lo cual hace muy complicado el conseguir el efecto de un Click. Tendrías que crear una clase derivada de Label para hacerlo correctamente. Hay ejemplos en inglés de como hacerlo (busca por la web porque el foro no me deja poner enlaces).

De todas formas, te recomiendo que uses el control Button porque es el control ideal cuando quieres hacer Click (y puedes darle la apariencia que quieras)

Suponiendo que usas el control Button, lo primero que tienes que hacer es crear el metodo que tratara el evento y que recibira el Control Button como el objeto sender.

Cuando se ejecute ese método al hacer click sobre un Button, tienes que hacer "casting" del objeto sender sobre un campo Button. Como has guardado el "id" en la propiedad Content, te puede servir para identificar el Button haciendo "casting" sobre una string (alternativamente puedes guardar cualquier identificador en la propiedad Tag).

Por último, inserta en tu codigo la siguiente asignación:

  b.Click=boton_Click;

(El procedimiento es el mismo en caso de que uses una clase derivada del control Label con el evento Click creado como la del ejemplo en ingles)

El conjunto queda de la siguiente forma:

Código: C#
  1.  
  2.  
  3. void boton_Click(object sender, RoutedEventArgs e)
  4. {
  5.             Button boton=(Button)sender;
  6.             string id = (string)boton.Content;
  7.             switch (id)
  8.             {
  9.                 case "xxxxxxx":
  10.                     //codigo para id xxxxxxx
  11.                     break;
  12.                 case "yyyyyyy":
  13.                     //codigo para id yyyyyyy
  14.                     break;
  15.                 default:
  16.                     break;
  17.             }
  18.  }
  19.  
  20.  
  21. void home_ListChanged()
  22.  {
  23.  int index = 0;
  24.  
  25.  while (index < home.List.Count)
  26.  {
  27.  button b = new Button();
  28.  Image image = new Image();
  29.  string id = ((Furniture)home.List.ElementAt(index)).Id;
  30.  image.Source = new BitmapImage(new Uri(@"/Frontend;component/Images/" + id + ".png", UriKind.Relative));
  31.  image.Width = home.List.ElementAt(index).Width;
  32.  image.Height = home.List.ElementAt(index).Height;
  33.  canvas.Children.Add(image);
  34.  b.Content = id;
  35.  mappingIda.Add(((Furniture)home.List.ElementAt(index)), image);
  36.  stackPanel.Children.Add(l);
  37.  b.Click=boton_Click;
  38.  index++;
  39.  }
  40.  }
  41.  
  42.  

Espero que sirva de ayuda

Saludos