Sebuah Jendela objek hanya apa yang terdengar seperti: a nya baru Window
untuk aplikasi Anda. Anda harus menggunakannya ketika Anda ingin memunculkan jendela yang sama sekali baru. Saya tidak sering menggunakan lebih dari satu Window
di WPF karena saya lebih suka meletakkan konten dinamis di Window utama saya yang berubah berdasarkan tindakan pengguna.
Sebuah halaman adalah halaman dalam jendela Anda. Itu sebagian besar digunakan untuk sistem berbasis web seperti XBAP, di mana Anda memiliki jendela browser tunggal dan halaman yang berbeda dapat di-host di jendela itu. Itu juga dapat digunakan dalam Aplikasi Navigasi seperti kata sellmeadog .
Sebuah UserControl adalah yang dibuat pengguna kontrol reusable yang dapat Anda tambahkan ke UI Anda dengan cara yang sama Anda akan menambahkan kontrol lainnya. Biasanya saya membuat UserControl
ketika saya ingin membangun beberapa fungsionalitas khusus (misalnya, a CalendarControl
), atau ketika saya memiliki sejumlah besar kode XAML terkait, seperti View
saat menggunakan pola desain MVVM.
Saat bernavigasi antar windows, Anda cukup membuat Window
objek baru dan menunjukkannya
var NewWindow = new MyWindow();
newWindow.Show();
tetapi seperti yang saya katakan di awal jawaban ini, saya lebih suka untuk tidak mengelola banyak jendela jika memungkinkan.
Metode navigasi pilihan saya adalah untuk membuat beberapa area konten dinamis menggunakan a ContentControl
, dan mengisi itu dengan UserControl
berisi apa pun tampilan saat ini.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
dan dalam acara navigasi Anda, Anda dapat mengaturnya menggunakan
ContentArea.Content = new MyUserControl();
Tetapi jika Anda bekerja dengan WPF, saya sangat merekomendasikan pola desain MVVM. Saya punya yang sangat mendasar di blog saya yang menggambarkan bagaimana Anda menavigasi menggunakan MVVM, menggunakan pola ini:
<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>