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>
AuditViewModel
contenant toutes les données et fonctionnalités du formulaire, et je le dessinerais en utilisant soit unAuditView
UserControl, soit juste unDataTemplate
ViewModel
est généralement construit pour leView
, tandis que leModels
sont les objets de données et les classes ("blocs de construction") utilisés par votre application (ViewModels
)TabControl.ItemsSource
à une collection d'objets et j'utilise des DataTemplates pour indiquer à WPF comment dessiner chaque type d'objet sur chaque onglet. Habituellement quelque chose comme çaWindows.Forms.Form
, donc juste une nouvelle fenêtreLa page est, selon la documentation en ligne :
Donc, vous utilisez essentiellement ceci si vous visualisez du contenu HTML
UserControl est destiné aux cas où vous souhaitez créer un composant réutilisable (mais pas autonome) pour l'utiliser dans plusieurs
Windows
la source
UserControl
dans le cas où vous pensez que le même ensemble de contrôles que vous utiliserez sur cette fenêtre, vous utiliserez également sur une autre, donc au lieu d'écrire du double code, créez simplement unUserControl
, mais sinon, mettez simplement des contrôles pour la visualisation de vos données sur elles-Window
mêmes, sur le côté droit des boutons que vous avez mentionnés.DataTemplates
. Ils sont utilisés lorsque vous souhaitez indiquer à WPF comment dessiner un élément dans une portée spécifique. Par exemple, si vous souhaitez dessiner vosButtons
cercles ronds, vous pouvez simplement utiliser aDataTemplate
au lieu de aUserControl
. J'utilise généralementUserControls
quand je veux un nouveau contrôle avec ses propres fonctionnalités, ou quand j'ai beaucoup de XAML pour un seul composant, comme pour unView
. Pour les petits morceaux de XAML qui ne nécessitent aucune fonctionnalité spéciale, vous devriez utiliser unDataTemplate
au lieu de créer unUserControl
Page
n'est pas HTML mais XAML. Cependant, aPage
est lié au cadre de navigation qui est conceptuellement similaire à la façon dont la navigation est effectuée dans un navigateur Web. (Et les pages peuvent même être hébergées dans un navigateur si l'application est une application XBAP.)Tout dépend de l'application que vous essayez de créer. Utilisez
Window
s si vous créez une application basée sur une boîte de dialogue. UtilisezPage
s si vous créez une application basée sur la navigation .UserControl
s seront utiles quelle que soit la direction dans laquelle vous allez car vous pouvez les utiliser à la fois dans Windows et dans Pages.Un bon endroit pour commencer à explorer est ici: http://windowsclient.net/learn
la source
Nous utilisons généralement One Main
Window
pour l'application et d'autres fenêtres peuvent être utilisées dans des situations telles que lorsque vous avez besoin de fenêtres contextuelles, car au lieu d'utiliser des contrôles contextuels en XAML qui ne sont pas visibles, nous pouvons utiliser une fenêtre visible au moment du design, ce qui sera facile. travailler avecD'autre part, nous utilisons de nombreuses pages pour naviguer d'un écran à un autre, comme l'écran de gestion des utilisateurs à l'écran de commande, etc.Dans la fenêtre principale, nous pouvons utiliser le
Frame
contrôle pour la navigation comme ci-dessous XAMLC #
C'est une façon de le faire. Nous pouvons également utiliser un contrôle de tabulation au lieu de Fram et y ajouter des pages à l'aide d'un dictionnaire tout en ajoutant une nouvelle page pour vérifier si le contrôle existe déjà, puis uniquement naviguer, ajouter et naviguer. J'espère que ça aidera quelqu'un
la source
La plupart de tous ont affiché la bonne réponse. Je voudrais ajouter quelques liens, afin que vous puissiez vous y référer et avoir des idées claires et meilleures sur les mêmes:
UserControl: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
La différence entre la page et la fenêtre par rapport à WPF: page vs fenêtre dans WPF?
la source