none
Mostrar diferentes imagenes dependiendo del item al que doy un touch

    Question

  • Hola que tal tengo el siguiente problema tengo esta vista con una lista de imagenes:

    al dar click quiero mostrar cada 1 en pantalla ahora solo he podido mostrar la primera

    el codigo que uso es el siguiente:

     public void ParserOnlineGaleria(string Contenido)

            {

     

                XElement xmlGaleria = XElement.Parse(Contenido); //XML Almacenado en Var Contenido

     

                XElement last = (XElement)xmlGaleria.LastNode; //Acceso al ultimo nodo para sacar el campo updated

     

                string update; //var almacenamiento update

     

                //Coleccion de Imagenes

     

                GaleriaImagen.ItemsSource = from notas in xmlGaleria.Descendants("contenido")

                                            select new Galeria

                                            {

                                                Imagen = notas.Element("miniatura").Value,

                                                Descripcion = notas.Element("descripcion").Value,

                                                Titulo = notas.Element("titulo").Value,

                                                Fecha = notas.Element("fecha").Value,

                                                Url = notas.Element("url").Value

                                            };

                //Coleccion de Imagenes

     

                List<Galeria> Lista = (GaleriaImagen.ItemsSource as IEnumerable<Galeria>).ToList();

     

                urlImagen = Lista.ElementAt(0).Url;

    }

     

    el parametro urlImagen lo paso a una clase nueva donde muestro la imagen este es el codigo

    namespace Cum_mx_7._0

    {

        public partial class Imagen_Full : PhoneApplicationPage

        {

     

            public Imagen_Full()

            {

                InitializeComponent();

                AppBar();

     

                Multimedia valor = new Multimedia();

     

                try

                {

                    Imagen.Source = new Uri(valor.regresar());

                }

     

                catch

                {

                    MessageBox.Show("No hay red disponible intente mas tarde");

                }

            }

     

    gracias por su ayuda saludos

    Wednesday, August 17, 2011 11:52 PM

Answers

  • Hola Luis,

     

    Veo que el problema lo tienes en el metodo "ParseOnlineGaleria", aquí tu guardas en la variable urlImagen el valor "Url" del primer elemento de "Galería".

    Es decir estás dos lineas veo que no te hacen falta

     

     List<Galeria> Lista = (GaleriaImagen.ItemsSource as IEnumerable<Galeria>).ToList();
     urlImagen = Lista.ElementAt(0).Url;
    

     


    Y por otra parte veo que la imagen que muestras de la primera pantalla tienes un Button para ver la Imagen, o por lo menos eso es lo que parece. 

    Te voy a pasar, un ejemplo que aunque no es como se deben de hacer las cosas, puesto que no implementa MVVM, te puede servir para que te hagas una idea, básicamente lo que hago es guardar en la propiedad Tag del boton la url de la Imagen que quiero mostrar en la siguiente pantalla, y en el evento click del Button obtener ese Tag.

     

    Xaml.

     

    <phone:PhoneApplicationPage 
     x:Class="WindowsPhoneApplication2.MainPage"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
     FontFamily="{StaticResource PhoneFontFamilyNormal}"
     FontSize="{StaticResource PhoneFontSizeNormal}"
     Foreground="{StaticResource PhoneForegroundBrush}"
     SupportedOrientations="Portrait" Orientation="Portrait"
     shell:SystemTray.IsVisible="True">
    
     <!--LayoutRoot es la cuadrícula raíz donde se coloca todo el contenido de la página-->
     <Grid x:Name="LayoutRoot" Background="Transparent">
      <Grid.RowDefinitions>
       <RowDefinition Height="Auto"/>
       <RowDefinition Height="*"/>
      </Grid.RowDefinitions>
    
      <!--TitlePanel contiene el nombre de la aplicación y el título de la página-->
      <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
       <TextBlock x:Name="ApplicationTitle" Text="MI APLICACIÓN" Style="{StaticResource PhoneTextNormalStyle}"/>
       <TextBlock x:Name="PageTitle" Text="nombre de la página" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
      </StackPanel>
    
      <!--ContentPanel. Colocar aquí el contenido adicional-->
      <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
       <ListBox ItemsSource="{Binding}" x:Name="Lista">
        
        <ListBox.ItemTemplate>
         <DataTemplate>
          <StackPanel>
           <TextBox Text="{Binding Titulo}"></TextBox>
           <TextBox Text="{Binding Fecha}"></TextBox>
           <Button Content="Ver Imagen" Tag="{Binding Url}" Click="Button_Click"></Button>
          </StackPanel>
         </DataTemplate>
        </ListBox.ItemTemplate>
        
       </ListBox>
      </Grid>
     </Grid>
     
     <!--Código de ejemplo que muestra el uso de ApplicationBar-->
     <!--<phone:PhoneApplicationPage.ApplicationBar>
      <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
       <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Botón 1"/>
       <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Botón 2"/>
       <shell:ApplicationBar.MenuItems>
        <shell:ApplicationBarMenuItem Text="Elemento de menú 1"/>
        <shell:ApplicationBarMenuItem Text="Elemento de menú 2"/>
       </shell:ApplicationBar.MenuItems>
      </shell:ApplicationBar>
     </phone:PhoneApplicationPage.ApplicationBar>-->
    
    </phone:PhoneApplicationPage>


     

    Codigo

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructor
        public MainPage()
        {
          InitializeComponent();
          ParseOnlineGaleria();
        }
    
        private void ParseOnlineGaleria()
        {
          this.Lista.ItemsSource = new List<Galeria>
          {
            new Galeria(){Titulo="Imagen de Hoy",Fecha = "17-08-2011 16:21",Url = "Url1"},
            new Galeria(){Titulo="Imagen 2 del Día",Fecha = "17-08-2011 16:22",Url = "Url2"}
          };
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
          Button button = sender as Button;
          if (button != null)
          {
            if (button.Tag != null)
            {
              string UrlImagen = button.Tag.ToString();
            }
          }
        }
      }
      
      
      public class Galeria
      {
    
        public int Imagen { get; set; }
        public string Titulo { get; set; }
        public string Fecha { get; set; }
        public string Url { get; set; }
    
      }


    Saludos,


    phurtado
    Thursday, August 18, 2011 8:24 AM

All replies

  • Hola Luis,

     

    Veo que el problema lo tienes en el metodo "ParseOnlineGaleria", aquí tu guardas en la variable urlImagen el valor "Url" del primer elemento de "Galería".

    Es decir estás dos lineas veo que no te hacen falta

     

     List<Galeria> Lista = (GaleriaImagen.ItemsSource as IEnumerable<Galeria>).ToList();
     urlImagen = Lista.ElementAt(0).Url;
    

     


    Y por otra parte veo que la imagen que muestras de la primera pantalla tienes un Button para ver la Imagen, o por lo menos eso es lo que parece. 

    Te voy a pasar, un ejemplo que aunque no es como se deben de hacer las cosas, puesto que no implementa MVVM, te puede servir para que te hagas una idea, básicamente lo que hago es guardar en la propiedad Tag del boton la url de la Imagen que quiero mostrar en la siguiente pantalla, y en el evento click del Button obtener ese Tag.

     

    Xaml.

     

    <phone:PhoneApplicationPage 
     x:Class="WindowsPhoneApplication2.MainPage"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
     FontFamily="{StaticResource PhoneFontFamilyNormal}"
     FontSize="{StaticResource PhoneFontSizeNormal}"
     Foreground="{StaticResource PhoneForegroundBrush}"
     SupportedOrientations="Portrait" Orientation="Portrait"
     shell:SystemTray.IsVisible="True">
    
     <!--LayoutRoot es la cuadrícula raíz donde se coloca todo el contenido de la página-->
     <Grid x:Name="LayoutRoot" Background="Transparent">
      <Grid.RowDefinitions>
       <RowDefinition Height="Auto"/>
       <RowDefinition Height="*"/>
      </Grid.RowDefinitions>
    
      <!--TitlePanel contiene el nombre de la aplicación y el título de la página-->
      <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
       <TextBlock x:Name="ApplicationTitle" Text="MI APLICACIÓN" Style="{StaticResource PhoneTextNormalStyle}"/>
       <TextBlock x:Name="PageTitle" Text="nombre de la página" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
      </StackPanel>
    
      <!--ContentPanel. Colocar aquí el contenido adicional-->
      <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
       <ListBox ItemsSource="{Binding}" x:Name="Lista">
        
        <ListBox.ItemTemplate>
         <DataTemplate>
          <StackPanel>
           <TextBox Text="{Binding Titulo}"></TextBox>
           <TextBox Text="{Binding Fecha}"></TextBox>
           <Button Content="Ver Imagen" Tag="{Binding Url}" Click="Button_Click"></Button>
          </StackPanel>
         </DataTemplate>
        </ListBox.ItemTemplate>
        
       </ListBox>
      </Grid>
     </Grid>
     
     <!--Código de ejemplo que muestra el uso de ApplicationBar-->
     <!--<phone:PhoneApplicationPage.ApplicationBar>
      <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
       <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Botón 1"/>
       <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Botón 2"/>
       <shell:ApplicationBar.MenuItems>
        <shell:ApplicationBarMenuItem Text="Elemento de menú 1"/>
        <shell:ApplicationBarMenuItem Text="Elemento de menú 2"/>
       </shell:ApplicationBar.MenuItems>
      </shell:ApplicationBar>
     </phone:PhoneApplicationPage.ApplicationBar>-->
    
    </phone:PhoneApplicationPage>


     

    Codigo

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructor
        public MainPage()
        {
          InitializeComponent();
          ParseOnlineGaleria();
        }
    
        private void ParseOnlineGaleria()
        {
          this.Lista.ItemsSource = new List<Galeria>
          {
            new Galeria(){Titulo="Imagen de Hoy",Fecha = "17-08-2011 16:21",Url = "Url1"},
            new Galeria(){Titulo="Imagen 2 del Día",Fecha = "17-08-2011 16:22",Url = "Url2"}
          };
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
          Button button = sender as Button;
          if (button != null)
          {
            if (button.Tag != null)
            {
              string UrlImagen = button.Tag.ToString();
            }
          }
        }
      }
      
      
      public class Galeria
      {
    
        public int Imagen { get; set; }
        public string Titulo { get; set; }
        public string Fecha { get; set; }
        public string Url { get; set; }
    
      }


    Saludos,


    phurtado
    Thursday, August 18, 2011 8:24 AM
  • El listado lo obtengo de un XML  por eso tengo ese metodo de parseo y el url lo obtengo de ahi por eso es diferente para cada boton el boton solo lo ocupo para enviar una señal que me conecta con la siguiente pantalla y le mando el url de cada posicion por eso hago esa coleccion en el codigo anterior alguna otra alternativa? 
    Friday, August 19, 2011 5:50 PM
  • Muchas gracias pedro :) al fin he terminado la aplicación en breve les indicare cual es el nombre para que puedan verla si gustan saludos! y muchas gracias por tu ayuda
    Friday, August 19, 2011 6:17 PM