Ventana vs Página vs UserControl para navegación WPF?

Me preguntaba si alguien podría ayudarme. Soy nuevo en WPF y actualmente estoy escribiendo una aplicación de escritorio, pero parece que no puedo entender qué debo usar para redirigir a alguien a una nueva sección de la aplicación.

Mis opciones parecen ser

  • Ventana
  • Página
  • Control de usuario

pero no entiendo cuál es la diferencia entre ellos, y cuándo debo usar cada uno.

¿Podría alguien explicarme las diferencias y dar un ejemplo de las situaciones / aplicaciones para las que puede usar cada una?

Un objeto Window es exactamente lo que parece: es una nueva Window para su aplicación. Deberías usarlo cuando quieras abrir una ventana completamente nueva. No uso a menudo más de una Window en WPF porque prefiero poner contenido dynamic en mi ventana principal que cambia en función de la acción del usuario.

Una página es una página dentro de su ventana. Se utiliza principalmente para sistemas basados ​​en la web como un XBAP, donde tiene una sola ventana del navegador y se pueden alojar diferentes páginas en esa ventana. También se puede usar en aplicaciones de navegación como sellmeadog .

Un UserControl es un control reutilizable creado por el usuario que puede agregar a su UI de la misma manera que agregaría cualquier otro control. Usualmente creo un UserControl cuando quiero construir alguna funcionalidad personalizada (por ejemplo, un CalendarControl ), o cuando tengo una gran cantidad de código XAML relacionado, como una View cuando uso el patrón de diseño de MVVM.

Cuando navega entre ventanas, puede simplemente crear un nuevo objeto de Window y mostrarlo

 var NewWindow = new MyWindow(); newWindow.Show(); 

pero como dije al principio de esta respuesta, prefiero no administrar varias ventanas si es posible.

Mi método de navegación preferido es crear un área de contenido dynamic usando un ContentControl , y llenarlo con un UserControl contenga lo que sea que sea la vista actual.

      

y en su evento de navegación puede simplemente configurarlo usando

 ContentArea.Content = new MyUserControl(); 

Pero si está trabajando con WPF, le recomendaría encarecidamente el patrón de diseño de MVVM. Tengo un ejemplo muy básico en mi blog que ilustra cómo navegaría usando MVVM, usando este patrón:

                           

Captura de pantalla1Screenshot2

  • Window es como Windows.Forms.Form , solo una nueva ventana
  • La página es, según la documentación en línea :

    Encapsula una página de contenido que puede ser navegada y hospedada por Windows Internet Explorer, NavigationWindow y Frame.

    Entonces, básicamente utilizas esto si vas a visualizar algo de contenido HTML

  • UserControl es para casos en los que desea crear algún componente reutilizable (pero no independiente) para usarlo en múltiples Windows diferentes

Todo depende de la aplicación que intentas construir. Use Window s si está creando una aplicación basada en un diálogo. Usa la Page si estás construyendo una aplicación basada en navegación . UserControl s será útil independientemente de la dirección que vaya, ya que puede usarlos tanto en Windows como en Pages.

Un buen lugar para empezar a explorar está aquí: http://windowsclient.net/learn

La mayoría de todos ha publicado una respuesta correcta. Me gustaría agregar algunos enlaces para que pueda consultarlos y tener ideas claras y mejores sobre lo mismo:

UserControl: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx

La diferencia entre la página y la ventana con respecto a WPF: Página frente a ventana en WPF?

Usualmente usamos One Main Window para la aplicación y otras ventanas se pueden usar en situaciones como cuando necesita ventanas emergentes porque en vez de usar controles emergentes en XAML que no están visibles, podemos usar una ventana que está visible en el momento del diseño, así que será fácil de trabajar con

Por otro lado, usamos muchas páginas para navegar de una pantalla a otra, como la pantalla de administración de usuarios, a la pantalla de pedidos, etc. En la ventana principal, podemos usar el control de Fram para navegar, como debajo de XAML

    

DO#

  private void mainWinFrame_Click(object sender, RoutedEventArgs e) { try { if (e.OriginalSource is Button) { Button btn = (Button)e.OriginalSource; if ((btn.CommandParameter != null) && (btn.CommandParameter.Equals("Order"))) { mainWinFrame.Navigate(OrderPage); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } } 

Esa es una forma de hacerlo. También podemos usar un control de tabs en lugar de Fram y agregar páginas a él usando un diccionario, mientras agregamos una nueva página, verifique si el control ya existe, solo navegue o agregue y navegue. Espero que eso ayude a alguien