Un objeto Window es exactamente lo que parece: es nuevo Window
para su aplicación. Debe usarlo cuando desee abrir una ventana completamente nueva. No suelo usar más de unoWindow
en WPF porque prefiero poner contenido dinámico en mi ventana principal que cambia según 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 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, dijo .
Un UserControl es un control reutilizable creado por el usuario que puede agregar a su IU de la misma manera que agregaría cualquier otro control. Por lo general, creo un UserControl
cuando quiero incorporar alguna funcionalidad personalizada (por ejemplo, a CalendarControl
), o cuando tengo una gran cantidad de código XAML relacionado, como View
cuando uso el patrón de diseño MVVM.
Al navegar entre ventanas, simplemente puede crear un nuevo Window
objeto y mostrarlo
var NewWindow = new MyWindow();
newWindow.Show();
pero como dije al comienzo de esta respuesta, prefiero no administrar varias ventanas si es posible.
Mi método preferido de navegación es crear un área de contenido dinámico usando a ContentControl
, y llenarla con un UserControl
contenido cualquiera sea la vista actual.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
y en su evento de navegación simplemente puede configurarlo usando
ContentArea.Content = new MyUserControl();
Pero si está trabajando con WPF, le recomiendo el patrón de diseño MVVM. Tengo un ejemplo muy básico en mi blog que ilustra cómo navegarías usando MVVM, usando este patrón:
<Window x:Class="SimpleMVVMExample.ApplicationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SimpleMVVMExample"
Title="Simple MVVM Example" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type local:HomeViewModel}">
<local:HomeView /> <!-- This is a UserControl -->
</DataTemplate>
<DataTemplate DataType="{x:Type local:ProductsViewModel}">
<local:ProductsView /> <!-- This is a UserControl -->
</DataTemplate>
</Window.Resources>
<DockPanel>
<!-- Navigation Buttons -->
<Border DockPanel.Dock="Left" BorderBrush="Black"
BorderThickness="0,0,1,0">
<ItemsControl ItemsSource="{Binding PageViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}"
Command="{Binding DataContext.ChangePageCommand,
RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
CommandParameter="{Binding }"
Margin="2,5"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<!-- Content Area -->
<ContentControl Content="{Binding CurrentPageViewModel}" />
</DockPanel>
</Window>
AuditViewModel
contiene todos los datos y la funcionalidad del formulario, y lo dibujaría usando unAuditView
UserControl, o simplemente unDataTemplate
ViewModel
generalmente se crea paraView
, mientras queModels
son los objetos de datos y las clases ("bloques de construcción") utilizados por su aplicación (ViewModels
)TabControl.ItemsSource
a una colección de objetos y uso DataTemplates para decirle a WPF cómo dibujar cada tipo de objeto en cada pestaña. Por lo general, algo como estoWindows.Forms.Form
una nueva ventanaLa página es, de acuerdo con la documentación en línea :
Así que básicamente usas esto si vas a visualizar contenido HTML
UserControl es para casos en los que desea crear algún componente reutilizable (pero no uno independiente) para usarlo en múltiples diferentes
Windows
fuente
UserControl
en caso de que piense que el mismo conjunto de controles que usará en esta ventana también lo usará en otro, así que en lugar de escribir un código doble, simplemente cree unUserControl
, pero si no, simplemente coloque controles para la visualización de sus datos enWindow
sí mismo, en el lado derecho de los botones que mencionó.DataTemplates
. Estos se usan cuando desea decirle a WPF cómo dibujar un elemento dentro de un alcance específico. Por ejemplo, si desea dibujar susButtons
círculos redondos, simplemente puede usar a enDataTemplate
lugar de aUserControl
. Usualmente lo usoUserControls
cuando quiero un nuevo control con su propia funcionalidad, o cuando tengo mucho XAML para un solo componente, como para unView
. Para bits más pequeños de XAML que no requieren ninguna funcionalidad especial, debe usar un enDataTemplate
lugar de crear unUserControl
Page
no es HTML sino XAML. Sin embargo, aPage
está vinculado al marco de navegación que es conceptualmente similar a cómo se realiza la navegación en un navegador web. (Y las páginas incluso se pueden alojar en un navegador si la aplicación es una aplicación XBAP.)Todo depende de la aplicación que intentes crear. Use
Window
s si está creando una aplicación basada en diálogo. UsePage
s si está creando 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 comenzar a explorar es aquí: http://windowsclient.net/learn
fuente
Usualmente usamos One Main
Window
para la aplicación y otras ventanas se pueden usar en situaciones como cuando necesita ventanas emergentes porque en lugar de usar controles emergentes en XAML que no son visibles, podemos usar una ventana que sea visible en el momento del diseño para que sea fácil trabajar conPor 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
Frame
control para la navegación como debajo de XAMLC#
Esa es una forma de hacerlo. También podemos usar un Control de pestañas en lugar de Fram y Agregar páginas usando un Diccionario mientras agregamos una nueva página, verifique si el control ya existe y solo navegue, de lo contrario agregue y navegue. Espero que eso ayude a alguien
fuente
Sobre todo ha publicado la respuesta correcta. Me gustaría agregar algunos enlaces, para que pueda consultarlos y tener ideas claras y mejores sobre lo mismo:
Control de usuario: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
La diferencia entre página y ventana con respecto a WPF: ¿ Página frente a ventana en WPF?
fuente