Um objeto Window é exatamente o que parece: é um novo Windowpara o seu aplicativo. Você deve usá-lo quando desejar abrir uma janela totalmente nova. Geralmente não uso mais de um Windowno WPF porque prefiro colocar conteúdo dinâmico na minha janela principal que muda com base na ação do usuário.
Uma página é uma página dentro da sua janela. É usado principalmente para sistemas baseados na Web como um XBAP, onde você tem uma única janela do navegador e páginas diferentes podem ser hospedadas nessa janela. Também pode ser usado em aplicativos de navegação, como o sellmeadog disse .
Um UserControl é um controle reutilizável criado pelo usuário que você pode adicionar à sua interface do usuário da mesma maneira que adicionaria qualquer outro controle. Geralmente, eu crio um UserControlquando quero criar alguma funcionalidade personalizada (por exemplo, a CalendarControl) ou quando tenho uma grande quantidade de código XAML relacionado, como um Viewao usar o padrão de design MVVM.
Ao navegar entre janelas, você pode simplesmente criar um novo Windowobjeto e mostrá-lo
var NewWindow = new MyWindow();
newWindow.Show();
mas como eu disse no começo desta resposta, prefiro não gerenciar várias janelas, se possível.
Meu método preferido de navegação é criar uma área de conteúdo dinâmico usando a ContentControle preenchê-la com uma que UserControlcontenha a visualização atual.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
e no seu evento de navegação, você pode simplesmente configurá-lo usando
ContentArea.Content = new MyUserControl();
Mas se você estiver trabalhando com o WPF, recomendo o padrão de design do MVVM. Eu tenho um exemplo muito básico no meu blog que ilustra como você navegaria usando o MVVM, usando este padrão:
<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>
