Navegación entre páginas

Para dar las gracias debes entrar o registrarte en el foro

Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
30 Mar 2014, 01:23# 1

Hola, como siempre buscando ayuda por estos lados :)
Ahora estoy tratando con la navegación entre paginas, y tengo un inconveniente... no se muestra en la segunda pagina lo que obtengo de la primera. He mirado por internet y esta todo en orden no me da error ni nada.
El tema es: Que desde una segunda pagina, obtengo con la función OnNAvigatedFrom valores y acceso a objetos de la primer pagina. Por ejemplo las direcciones de ubicación de imágenes que tengo cargadas en la primer pagina.

Segunda Pagina:

namespace Proyecto1
{
public partial class CrearPag : PhoneApplicationPage
{

public CrearPag()
{
InitializeComponent();
}

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);

CrearPag1 crearImagen = e.Content as CrearPag1;

if (crearImagen != null)
{
Img1.Source = crearImagen.myImageL.Source;
Img2.Source = crearImagen.myImage2.Source;
Img3.Source = crearImagen.myImage3.Source;
Img4.Source = crearImagen.myImage4.Source;
Img5.Source = crearImagen.myImageR.Source;
//MessageBox.Show(Img1.Source);

}
}

}
}


Primer Pagina: Donde llamo a la segunda pagina
private void btnCrear_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/CrearPanorama.xaml" , UriKind.Relative));


}

También me gustaría saber si me pueden comentar como puedo mostrar por mensaje lo que realmente estoy definiendo en Img1.Source = crearImagen.myImageL.Source; (talvez esta vacia la direccion y yo no lo se)
Otra forma que vi es definiendo el disparador de evento loaded algun metodo definido en la misma .cs Pero no se si es lo mismo que lo que quiero hacer yop...

:thanks:

Gracias  
Etiquetado en:
Administrador
Administrador
Mensajes: 826 Agradecido: 119
30 Mar 2014, 12:42# 2

El manejador override no está en la página correcta. Es así:
Segunda Pagina:

namespace Proyecto1
{
public partial class CrearPag : PhoneApplicationPage
{

public CrearPag()
{
InitializeComponent();
}
}
}


Primer Pagina: Donde llamo a la segunda pagina
private void btnCrear_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/CrearPanorama.xaml" , UriKind.Relative));


}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);

CrearPag crearImagen = e.Content as CrearPag;

if (crearImagen != null)
{
crearImagen.Img1.Source = myImageL.Source;
crearImagen.Img2.Source = myImage2.Source;
crearImagen.Img3.Source = myImage3.Source;
crearImagen.Img4.Source = myImage4.Source;
crearImagen.Img5.Source = myImageR.Source;
MessageBox.Show(Img1.Source.ToString());

}
}

Para lo de los mensajes, en el código te he puesto cómo sería. TODOS los objetos de C# tienen el método ToString(). Aunque si lo estás ejecutando desde el emulador desde el Visual Studio, puedes poner breakpoints para ver el valor de todo lo que esté dentro del ámbito del breakpoint.
También puedes usar System.Diagnostics.Debug para escribir información en la ventana Resultado del Visual Studio.

Enviado desde mi LG-V500 mediante Tapatalk

Gracias  
1 persona ha dado las gracias: candyvf
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
31 Mar 2014, 16:00# 3

Gracias davdi, y una pregunta mas... el manejador OnNavigateTo() funciona igual que el From o al reves?¿ MUCHAS GRACIAS POR AYUDARME! :)

Gracias  
Administrador
Administrador
Mensajes: 826 Agradecido: 119
31 Mar 2014, 23:49# 4

De nada. Me encantan las dudas de programación :) Pregunta todo lo que quieras. El compañero @dbahamondes o yo mismo te intentaremos ayudar.
OnNavigateTo() se ejecuta cuando entramos en la página; OnNavigateFrom() cuando salimos de la página.

Enviado desde mi LG-V500 mediante Tapatalk

Gracias  
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
03 Abr 2014, 17:06# 5

Davdi, Tengo varios problemitas pero creo que es por lo mismo: Se produjo una excepción de tipo 'System.NullReferenceException' en Panorama.DLL pero no se controló en el código del usuario

El error me lo da cuando utilizo la funcion: myImageL.Source.ToString();
Quiero pasar por OnNavigateFrom() la direccion de un objeto (Image.Source()) a un BitmapImage... pero me esta dando error NULL. Algo estoy usando mal :/

Mi código es, en la primer Pagina:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);

MainPage1 crearImagen = e.Content as MainPage1;

if (crearImagen != null)
{
crearImagen.bmgImg1.SetSource(Application.GetResourceStream(new Uri(myImageL.Source.ToString())).Stream);
crearImagen.bmgImg2.SetSource(Application.GetResourceStream(new Uri(myImage2.Source.ToString())).Stream);

}
}

en la segunda pagina:

public partial class MainPage : PhoneApplicationPage
{
private Bitmap Img1, Img2;
//agregadp para pasar por navegacion
public BitmapImage bmgImg1, bmgImg2;


private void MainPage_OnLoaded(object sender, RoutedEventArgs e)
{
var bmpi = new BitmapImage();

bmpi.SetSource(Application.GetResourceStream(bmgImg1.UriSource).Stream);
Img1 = ((Bitmap)new WriteableBitmap(bmpi)).Clone(PixelFormat.Format24bppRgb);

bmpi.SetSource(Application.GetResourceStream(bmgImg2.UriSource).Stream);
Img2 = ((Bitmap)new WriteableBitmap(bmpi)).Clone(PixelFormat.Format24bppRgb);

// Concatenate and show entire image at start
Concatenate concatenate = new Concatenate(Img1);
PictureBox.Source = concatenate.Apply(Img2);
}

}

Gracias  
Administrador
Administrador
Mensajes: 826 Agradecido: 119
03 Abr 2014, 23:57# 6

Viendo el código, yo diría que la excepción te la está dando el objeto bmgImg1, y también te lo daría en bmgImg2 en el manejador OnNavigatedFrom() de la primera página.
Según veo, no están inicializados. Se arreglaría creando un constructor de MainPage; así (pon lo siguiente justo antes del manejador MainPage_OnLoaded()):

public MainPage()
{
bmgImg1 = new BitmapImage();
bmgImg2 = new BitmapImage();
}

Enviado desde mi LG-V500 mediante Tapatalk

Gracias  
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
04 Abr 2014, 16:54# 7

que tonta, muchas gracias... no me había dado cuenta de ese detalle. Pero igualmente me sigue dando error ("Se produjo una excepción de tipo 'System.UriFormatException' en System.ni.dll pero no se controló en el código del usuario") cuando se ejecuta la linea de código:
crearImagen.bmgImg1.SetSource(Application.GetResourceStream(new Uri(myImageL.Source.ToString())).Stream);

He leído que no se puede convertir la propiedad Image.source en string. La verdad que con esto estoy perdida y no encuentro ningún ejemplo que trate de hacer lo que estoy haciendo yop :/
No se me ocurre sino, otra forma para pasar esa propiedad para luego utilizarla con un BitmapImage. Agradezco mucho tu ayuda :)

Gracias  
Administrador
Administrador
Mensajes: 826 Agradecido: 119
04 Abr 2014, 19:12# 8

No te preocupes. Ese tipo de fallos son de lo más común ;)
Respecto al error, sustituye:
crearImagen.bmgImg1.SetSource(Application.GetResourceStream(new Uri(myImageL.Source.ToString())).Stream);
crearImagen.bmgImg2.SetSource(Application.GetResourceStream(new Uri(myImage2.Source.ToString())).Stream);

Por:

crearImagen.bmgImg1.SetSource(Application.GetResourceStream((myImageL.Source as BitmapImage).UriSource).Stream);
crearImagen.bmgImg2.SetSource((myImage2.Source as BitmapImage).UriSource).Stream);

Enviado desde mi LG-D802 mediante Tapatalk

Gracias  
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
07 Abr 2014, 16:17# 9

Gracias Davdi, me ha servido mucho tu ayuda :) Saludos

Gracias  
Administrador
Administrador
Mensajes: 826 Agradecido: 119
08 Abr 2014, 19:02# 10

De nada. Si tienes más dudas, ya sabes ;)

Enviado desde mi LG-D802 mediante Tapatalk

Gracias  