Un oggetto Window è proprio quello che sembra: è un nuovo Windowper la tua applicazione. Dovresti usarlo quando vuoi far apparire una finestra completamente nuova. Spesso non ne uso più di uno Windowin 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 UserControlquando voglio incorporare alcune funzionalità personalizzate (ad esempio, a CalendarControl) o quando ho una grande quantità di codice XAML correlato, come ad esempio Viewquando uso il modello di progettazione MVVM.
Durante la navigazione tra le finestre, è possibile semplicemente creare un nuovo Windowoggetto 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 ContentControle popolarla con un UserControlcontenuto 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>
