¿Cómo pasar valores (parámetros) entre páginas XAML?

Preguntas similares se han formulado anteriormente, pero esta pregunta se esfuerza por explorar más opciones y la capacidad de pasar objetos complejos.

La pregunta es cómo pasar los parámetros, pero realmente debe dividirse en tres partes.

Al navegar entre páginas en una aplicación XAML, ¿cómo se pasan los parámetros?¿Cuál es la diferencia entre usar la navegación Uri y la navegación manual?¿Cómo se pueden pasar objetos (no solo cadenas) cuando se utiliza la navegación Uri?

Ejemplo de navegación Uri

page.NavigationService.Navigate(new Uri("/Views/Page.xaml", UriKind.Relative));

Ejemplo de navegación manual

page.NavigationService.Navigate(new Page());

La respuesta a esta pregunta se aplica a WP7, silverlight, WPF y Windows 8.

Nota: hay una diferencia entre Silverlight y Windows 8

Windows Phone: las páginas se navegan para usar un Uri y los datos se pasan como una cadena de consulta o una instanciaWindows 8: se navega por las páginas pasando el tipo y los parámetros como objetos

Respuestas a la pregunta(1)

Su respuesta a la pregunta