Un objet Window est exactement ce à quoi il ressemble: c'est une nouveauté Window
pour votre application. Vous devez l'utiliser lorsque vous souhaitez ouvrir une toute nouvelle fenêtre. Je n'en utilise pas souvent plus d'un Window
dans WPF car je préfère mettre du contenu dynamique dans ma fenêtre principale qui change en fonction de l'action de l'utilisateur.
Une page est une page à l'intérieur de votre fenêtre. Il est principalement utilisé pour les systèmes Web comme 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 les applications de navigation comme le dit sellmeadog .
Un UserControl est un contrôle réutilisable créé par l'utilisateur que vous pouvez ajouter à votre interface utilisateur de la même manière que vous ajouteriez tout autre contrôle. Habituellement, je crée un UserControl
lorsque je souhaite intégrer des fonctionnalités personnalisées (par exemple, a CalendarControl
), ou lorsque j'ai une grande quantité de code XAML associé, comme View
lors de l'utilisation du modèle de conception MVVM.
Lors de la navigation entre les fenêtres, vous pouvez simplement créer un nouvel Window
objet et l'afficher
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 fenêtres si possible.
Ma méthode de navigation préférée consiste à créer une zone de contenu dynamique à l'aide de a ContentControl
et à la remplir avec un UserControl
contenant quelle que soit la vue actuelle.
<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 un exemple très basique sur mon blog qui illustre comment vous navigueriez en utilisant 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>