none
Se puede pasar parametros por un listBox? RRS feed

  • Pregunta

  • Antes estaba pasando sobre un nombre y lo recuperaba de esta forma:

     

     ListBoxItem selectedItem = this.listBox.ItemContainerGenerator.ContainerFromItem(this.listBox.ItemsSource) as ListBoxItem;
    
    
    
    private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
          
    
        {
          
          MessageBox.Show(listBox.SelectedItem.ToString());
          
        }
    

    El problema que tengo es que estoy pasando una imagen al listbox y hay un  StackPanel dentro del mismo con la imagen y el texto.

     

     img.Source = new BitmapImage(new Uri(m.conexion, UriKind.RelativeOrAbsolute));
           img.Height = alturaif;
           img.Width = m.largo;
           img.Name = "img" + index.ToString();
           img.Margin = new Thickness(0, 0, 300, 0);
    
           
           TextBlock txt = new TextBlock();
           txt.Name = "txt" + index.ToString();
           txt.Text = m.nombre;
           txt.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
    
    
           StackPanel stk = new StackPanel();
          
      l
           stk.Children.Add(txt);
           stk.Children.Add(img);
    
           listBox.Items.Add(stk);
          
           
    

    Ahora mismo retorna: system.windows.controls.stackpanel

     

    Hay alguna forma de retorna el valor del campo textblock o llamar una función cuando el elemento es seleccionado con los valores de este elemento.

     

    muchas gracias

    jueves, 11 de agosto de 2011 10:55

Respuestas

Todas las respuestas

  • Si tienes un item asi de raro, ya no te vale lo del ToString. Puedes hacer un cast del SelectedItem a StackPanel, luego accedes al TextBlock e imprimes el texto.

    O mejor puedes hacerte una clase que tenga el stack panel, el textblock y la imagen, y tenga una propiedad publica que es el texto y tu simplemente añades objetos de esa clase al ListBox.


    Vicente Cartas Espinel - MVP XNA/DirectX

    Twitter - VicenteCartas

    Blog about C# and XNA Development

    Blog about Role Playing Games

    jueves, 11 de agosto de 2011 11:32
  • Totalmente de acuerdo,

    Create la clase y luego te creas un DataTemplate para mostrar los datos de esa clase y listo!!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    jueves, 11 de agosto de 2011 12:08
    Moderador
  • Gracias por contestar.

     

    Intente hace de las dos formas pero no me salio. No estoy acostubrado a manejar las clases.

     

    Al final hice de esta forma:

     txt.MouseLeftButtonUp += new MouseButtonEventHandler(txt_MouseLeftButtonUp);
    
     var txt = sender as TextBlock;
       MessageBox.Show(txt.Text);
    


     

    Si la solución propuesta es simples, me gustaria de ver un ejemplo para aprender.

     

    muchas gracias y un saludo

    viernes, 12 de agosto de 2011 0:22