2010-06-16 19 views
6

Soy nuevo en el uso de WPF. Tengo el siguiente programa que quiero crear: -La aplicación se abre con un botón -El usuario hace clic en el botón y los lleva a una página nueva con varias entradas.Crear páginas o Windows en WPF

Estoy confundido acerca de cómo debo hacer esto. Intenté abrir una nueva ventana, pero no quiero que se abra una ventana, quiero que sea una ventana. Intenté crear una nueva página y navegar a través de NavigationService pero no pude hacerlo funcionar.

Básicamente quiero crear un flujo de trabajo donde el usuario introduce algunas cosas, hace clic en el botón siguiente y se lleva a una página nueva para ingresar más información. ¿Alguien puede señalarme en la dirección correcta?

Respuesta

7

Use Pages en su aplicación y use NavigationService para cambiar entre ellas.

Por ejemplo, si tiene dos páginas en su paplication, "la Página 1" y "Página 2" se pueden incluir lo siguiente en Page1.xaml:

<Button Content="Next" Click="NextClicked" /> 

y esto en sus Page1.xaml.cs:

void NextClicked(object sender, RoutedEventArgs e) 
{ 
    NavigationService.Navigate(new Page2()); 
} 

otra posibilidad es utilizar esto:

NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative)); 

lo general, es más fácil hacer la primera, ya que y También puede establecer propiedades de Página2. Por ejemplo, si tiene un Página2 "CurrentItem" propiedad pública que se podría decir:

NavigationService.Navigate(new Page2 { CurrentItem = this.Something }); 

No se puede hacer eso con la sintaxis basada en Uri.

También puede crear instancias de varias páginas (Página1, Página2, etc) y almacenarlos en el objeto de aplicación, a continuación, cambiar a ellos de esta manera:

NavigationSerivce.Navigate(App.Page2); 

De esta manera, si alguna vez navegar a Página2 tarde Obtendrás exactamente el mismo objeto Página2. Alternativamente, puede usar la función de Diario de NavigationService para ayudar con esto.

1

El uso del NavigationService es la forma correcta de hacerlo. Debe agregar un marco a sus ventanas para mostrar sus páginas y luego navegar entre ellas con NavigationService.

+0

¿Cómo haré esto? Por ejemplo, tengo un formulario en mi ventana principal que indica una fuente que apunta a Page1.xaml. En la página1.xaml, tengo un botón y utilicé el siguiente código en el evento click: this.NavigationService.Navigate ("Página2.xaml"); Esto parece mostrar el texto "Página2.xaml" en la página y no en la página real. – cmptrer

0

Puede cambiar la referencia de MainWindow de su objeto de aplicación a otro objeto Window.

Application.Current.MainWindow = new SecondWindowToBeDisplayed(); 
2

Inicialmente no parece haber mucha diferencia en la preferencia de lo que se debe usar: Páginas o Windows. Sin embargo, mirando el objetivo previsto de la aplicación, sugeriría utilizar UserControls en lugar de Pages, ya que las páginas parecen centrarse en el contenido relacionado con la web, aunque también se pueden usar en aplicaciones independientes. Otro argumento que se ha hecho en another post se refiere al MSDN-documentation, y señala que al usar una Página, la Ventana de Navegación en la que está alojada no recuerda la instancia del contenido al que se navega y, por lo tanto, se necesitan otras técnicas de WPF para almacena ese contenido en tu historial de navegación.

NavigationWindow no almacena una instancia de un objeto de contenido en el historial de navegación.En cambio, NavigationWindow crea una nueva instancia del objeto de contenido cada vez que se navega utilizando el historial de navegación. Este comportamiento está diseñado para evitar el consumo excesivo de memoria cuando se navega hacia números grandes y grandes porciones de contenido. En consecuencia, el estado del contenido no se recuerda de una navegación a la siguiente. Sin embargo, WPF proporciona varias técnicas mediante las cuales puede almacenar una pieza de estado para un contenido en el historial de navegación.

Si utiliza un UserControl, no tendría ese problema si su objetivo es crear una aplicación nativa de todos modos. Puede descargar la plantilla this como ejemplo para usar UserControls en su lugar.