A Fenêtre est exactement ce qu'il semble être : c'est un nouveau Window
pour votre application. Vous devriez l'utiliser lorsque vous voulez faire apparaître une toute nouvelle fenêtre. Je n'utilise pas souvent plus d'une Window
en WPF parce que je préfère mettre dans ma fenêtre principale un contenu dynamique qui change en fonction des actions de l'utilisateur.
A Page est une page à l'intérieur de votre fenêtre. Il est surtout utilisé pour les systèmes basés sur le web comme un XBAP, où vous avez une seule fenêtre de navigateur et différentes pages peuvent être hébergées dans cette fenêtre. Il peut également être utilisé dans Applications de navigation comme sellmeadog a dit .
A Contrôle de l'utilisateur est un contrôle réutilisable créé par l'utilisateur que vous pouvez ajouter à votre interface utilisateur de la même manière que tout autre contrôle. En général, je crée un UserControl
lorsque je souhaite intégrer une fonctionnalité personnalisée (par exemple, une CalendarControl
), ou lorsque j'ai une grande quantité de code XAML connexe, comme une View
lorsqu'on utilise le modèle de conception MVVM.
Lorsque vous naviguez entre les fenêtres, vous pouvez simplement créer une nouvelle fenêtre. Window
et le montrer
var NewWindow = new MyWindow();
newWindow.Show();
mais comme je l'ai dit au début de cette réponse, je préfère ne pas gérer plusieurs Windows si possible.
La méthode de navigation que je préfère consiste à créer une zone de contenu dynamique à l'aide d'une balise ContentControl
et de le remplir avec un UserControl
contenant ce que la vue actuelle est.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
et dans votre événement de navigation vous pouvez simplement le définir en utilisant
ContentArea.Content = new MyUserControl();
Mais si vous travaillez avec WPF, je vous recommande vivement le modèle de conception MVVM. J'ai une très exemple de base sur mon blog qui illustre la façon dont on navigue avec MVVM, en utilisant ce modèle :
<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>