c# - tutorial - wpf vs windows forms
Ventana vs Página vs UserControl para navegación WPF? (5)
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?
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?
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
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
<Frame Name="mainWinFrame" NavigationUIVisibility="Hidden" ButtonBase.Click="mainWinFrame_Click">
</Frame>
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 pestañas 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
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 dinámico 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 dinámico usando un ContentControl
, y llenarlo con un UserControl
contenga lo que sea que sea la vista actual.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
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:
<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>
- 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