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>
AuditViewModel
Formular, das alle Daten und Funktionen für das Formular enthält, und ich würde es entweder mit einemAuditView
UserControl oder nur mit einemDataTemplate
ViewModel
wird normalerweise für das erstelltView
, während dasModels
die Datenobjekte und Klassen ("Bausteine") sind, die von Ihrer Anwendung (ViewModels
) verwendet werdenTabControl.ItemsSource
an eine Sammlung von Objekten und verwende DataTemplates, um WPF mitzuteilen, wie jeder Objekttyp auf jeder Registerkarte gezeichnet werden soll. Regel etwas wie dieseWindows.Forms.Form
, also nur ein neues FensterSeite ist laut Online-Dokumentation :
Sie verwenden dies also grundsätzlich, wenn Sie HTML-Inhalte visualisieren
UserControl ist für Fälle gedacht, in denen Sie eine wiederverwendbare Komponente (aber keine eigenständige) erstellen möchten, um sie in mehreren verschiedenen Komponenten zu verwenden
Windows
quelle
UserControl
Sie diese Option, wenn Sie der Meinung sind, dass die gleichen Steuerelemente, die Sie in diesem Fenster verwenden werden, auch in einem anderen Fenster verwendet werden. Erstellen Sie also anstelle von Doppelcode einfach einUserControl
Steuerelement, aber wenn nicht, setzen Sie einfach Steuerelemente zur Visualisierung von Ihre Daten befinden sich auf derWindow
rechten Seite der Schaltflächen, die Sie eingegeben haben.DataTemplates
. Diese werden verwendet, wenn Sie WPF mitteilen möchten, wie ein Element innerhalb eines bestimmten Bereichs gezeichnet werden soll. Wenn Sie beispielsweise IhreButtons
runden Kreise zeichnen möchten , können Sie einfach aDataTemplate
anstelle von a verwendenUserControl
. Ich verwende es normalerweise,UserControls
wenn ich ein neues Steuerelement mit eigener Funktionalität möchte oder wenn ich viel XAML für eine einzelne Komponente habe, z. B. für aView
. Für kleinere XAML-Bits, für die keine besonderen Funktionen erforderlich sind, sollten Sie eine verwenden,DataTemplate
anstatt eine zu erstellenUserControl
Page
nicht HTML, sondern XAML. APage
ist jedoch in das Navigationsframework eingebunden, das konzeptionell der Navigation in einem Webbrowser ähnelt. (Und Seiten können sogar in einem Browser gehostet werden, wenn die Anwendung eine XBAP-Anwendung ist.)Alles hängt von der App ab, die Sie erstellen möchten. Verwenden Sie
Window
s, wenn Sie eine dialogbasierte App erstellen. Verwenden SiePage
s, wenn Sie eine navigationsbasierte App erstellen .UserControl
s ist unabhängig von der Richtung, in die Sie gehen, nützlich, da Sie sie sowohl in Windows als auch in Pages verwenden können.Ein guter Ort, um mit der Erkundung zu beginnen, ist hier: http://windowsclient.net/learn
quelle
Normalerweise verwenden wir One Main
Window
für die Anwendung, und andere Fenster können in Situationen verwendet werden, in denen Sie Popups benötigen, da wir anstelle von Popup-Steuerelementen in XAML, die nicht sichtbar sind, ein Fenster verwenden können, das zur Entwurfszeit sichtbar ist, damit dies einfach ist arbeiten mitAuf der anderen Seite verwenden wir viele Seiten, um von einem Bildschirm zum anderen zu navigieren, z. B. den Benutzerverwaltungsbildschirm zum Bestellbildschirm usw. Im Hauptfenster können wir die
Frame
Steuerung für die Navigation wie unter XAML verwendenC #
Dies ist eine Möglichkeit. Wir können auch ein Tab-Steuerelement anstelle von Fram verwenden und Seiten mithilfe eines Wörterbuchs hinzufügen, während Sie eine neue Seite hinzufügen. Überprüfen Sie, ob das Steuerelement bereits vorhanden ist, und navigieren Sie nur, wenn Sie es hinzufügen und navigieren. Ich hoffe das hilft jemandem
quelle
Am allermeisten hat die richtige Antwort gepostet. Ich möchte einige Links hinzufügen, damit Sie darauf verweisen und klare und bessere Ideen dazu haben können:
Nutzerkontrolle: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
Der Unterschied zwischen Seite und Fenster in Bezug auf WPF: Seite gegen Fenster in WPF?
quelle