Ein Window- Objekt ist genau das, wonach es sich anhört: Es ist neu Window
für Ihre Anwendung. Sie sollten es verwenden, wenn Sie ein völlig neues Fenster öffnen möchten. Ich benutze nicht oft mehr als eineWindow
in WPF da ich lieber dynamischen Inhalt in mein Hauptfenster einfügen , der sich aufgrund von Benutzeraktionen ändert.
Eine Seite ist eine Seite in Ihrem Fenster. Es wird hauptsächlich für webbasierte Systeme wie XBAP verwendet, bei denen Sie über ein einziges Browserfenster verfügen und in diesem Fenster verschiedene Seiten gehostet werden können. Es kann auch in Navigationsanwendungen verwendet werden, wie Sellmeadog sagte .
Ein UserControl ist ein wiederverwendbares, vom Benutzer erstelltes Steuerelement, das Sie Ihrer Benutzeroberfläche genauso hinzufügen können wie jedes andere Steuerelement. Normalerweise erstelle ich eine, UserControl
wenn ich einige benutzerdefinierte Funktionen einbauen möchte (z. B. a CalendarControl
) oder wenn ich eine große Menge verwandten XAML-Codes habe, z. B. wenn ich View
das MVVM-Entwurfsmuster verwende.
Beim Navigieren zwischen Fenstern können Sie einfach ein neues Window
Objekt erstellen und anzeigen
var NewWindow = new MyWindow();
newWindow.Show();
Aber wie ich zu Beginn dieser Antwort sagte, ziehe ich es vor, wenn möglich nicht mehrere Fenster zu verwalten.
Meine bevorzugte Navigationsmethode besteht darin, einen dynamischen Inhaltsbereich mit a zu erstellen ContentControl
und diesen mit a zu füllenUserControl
füllen, der die aktuelle Ansicht enthält.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
und in Ihrem Navigationsereignis können Sie es einfach mit einstellen
ContentArea.Content = new MyUserControl();
Wenn Sie jedoch mit WPF arbeiten, kann ich das MVVM-Entwurfsmuster nur empfehlen. Ich habe ein sehr einfaches Beispiel in meinem Blog , das zeigt, wie Sie mit MVVM mithilfe dieses Musters navigieren würden:
<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>