Un oggetto Window è proprio quello che sembra: è un nuovo Window
per la tua applicazione. Dovresti usarlo quando vuoi far apparire una finestra completamente nuova. Spesso non ne uso più di uno Window
in WPF perché preferisco inserire contenuto dinamico nella mia finestra principale che cambia in base all'azione dell'utente.
Una pagina è una pagina all'interno della tua finestra. Viene utilizzato principalmente per sistemi basati sul Web come un XBAP, in cui si dispone di un'unica finestra del browser e in quella finestra è possibile ospitare pagine diverse. Può essere utilizzato anche in applicazioni di navigazione come ha detto sellmeadog .
Un UserControl è un controllo riutilizzabile creato dall'utente che puoi aggiungere all'interfaccia utente nello stesso modo in cui aggiungeresti qualsiasi altro controllo. Di solito creo un UserControl
quando voglio incorporare alcune funzionalità personalizzate (ad esempio, a CalendarControl
) o quando ho una grande quantità di codice XAML correlato, come ad esempio View
quando uso il modello di progettazione MVVM.
Durante la navigazione tra le finestre, è possibile semplicemente creare un nuovo Window
oggetto e mostrarlo
var NewWindow = new MyWindow();
newWindow.Show();
ma come ho detto all'inizio di questa risposta, preferisco non gestire più finestre se possibile.
Il mio metodo di navigazione preferito è quello di creare un'area di contenuto dinamico usando a ContentControl
e popolarla con un UserControl
contenuto qualunque sia la vista corrente.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
e nel tuo evento di navigazione puoi semplicemente impostarlo usando
ContentArea.Content = new MyUserControl();
Ma se lavori con WPF, consiglio vivamente il modello di progettazione MVVM. Ho un esempio molto semplice sul mio blog che illustra come navigheresti usando MVVM, usando questo schema:
<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>