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>
AuditViewModel
berisi semua data dan fungsionalitas untuk formulir, dan saya akan menariknya menggunakanAuditView
UserControl, atau hanyaDataTemplate
ViewModel
Biasanya dibangun untukView
, sedangkanModels
objek data dan kelas ("blok bangunan") digunakan oleh aplikasi Anda (ViewModels
)TabControl.ItemsSource
ke kumpulan objek, dan menggunakan DataTemplates untuk memberi tahu WPF cara menggambar setiap jenis objek pada setiap tab. Biasanya kira-kira seperti iniWindows.Forms.Form
, jadi hanya jendela baruHalaman tersebut, menurut dokumentasi online :
Jadi pada dasarnya Anda menggunakan ini jika Anda memvisualisasikan beberapa konten HTML
UserControl adalah untuk kasus-kasus ketika Anda ingin membuat beberapa komponen yang dapat digunakan kembali (tetapi bukan komponen mandiri) untuk menggunakannya dalam berbagai macam
Windows
sumber
UserControl
dalam kasus di mana Anda berpikir set kontrol yang sama yang akan Anda gunakan pada jendela ini juga akan Anda gunakan pada jendela lain, jadi alih-alih menulis kode ganda, buat sajaUserControl
, tetapi jika tidak, cukup taruh kontrol untuk visualisasi dari data Anda padaWindow
dirinya sendiri, di sebelah kanan dari tombol yang Anda sebutkan.DataTemplates
. Ini digunakan ketika Anda ingin memberi tahu WPF cara menggambar item dalam lingkup tertentu. Misalnya, jika Anda ingin menggambar AndaButtons
menjadi lingkaran, Anda bisa menggunakanDataTemplate
aUserControl
. Saya biasanya menggunakanUserControls
ketika saya ingin kontrol baru dengan fungsinya sendiri, atau ketika saya memiliki banyak XAML untuk satu komponen, seperti untuk aView
. Untuk bit XAML yang lebih kecil yang tidak memerlukan fungsionalitas khusus, Anda harus menggunakanDataTemplate
alih - alih membuatUserControl
Page
bukan HTML tetapi XAML. Namun, aPage
terikat pada kerangka navigasi yang secara konseptual mirip dengan cara navigasi dilakukan di browser web. (Dan halaman bahkan dapat di-host di browser jika aplikasi tersebut adalah aplikasi XBAP.)Semua tergantung pada aplikasi yang Anda coba bangun. Gunakan
Window
s jika Anda sedang membangun aplikasi berbasis dialog. GunakanPage
s jika Anda sedang membangun aplikasi berbasis navigasi .UserControl
s akan bermanfaat terlepas dari arah yang Anda tuju karena Anda dapat menggunakannya di Windows dan Halaman.Tempat yang baik untuk mulai menjelajah ada di sini: http://windowsclient.net/learn
sumber
Kami biasanya menggunakan One Main
Window
untuk aplikasi dan windows lain dapat digunakan dalam situasi seperti ketika Anda membutuhkan popup karena alih-alih menggunakan kontrol popup di XAML yang tidak terlihat, kita dapat menggunakan Window yang terlihat pada waktu desain sehingga akan mudah bekerja dengandi sisi lain kami menggunakan banyak halaman untuk bernavigasi dari satu layar ke yang lain seperti layar manajemen pengguna ke Layar Pesanan dll. Di Jendela utama kita dapat menggunakan
Frame
kontrol untuk navigasi seperti di bawah XAMLC #
Itu salah satu cara melakukannya. Kita juga dapat menggunakan Kontrol Tab alih-alih Fram dan Tambahkan halaman ke sana menggunakan Kamus sambil menambahkan memeriksa halaman baru jika kontrol sudah ada maka hanya menavigasi jika tidak menambah dan menavigasi. Saya harap itu akan membantu seseorang
sumber
Kebanyakan dari semuanya telah memposting jawaban yang benar. Saya ingin menambahkan beberapa tautan, sehingga Anda dapat merujuknya dan memiliki gagasan yang jelas dan lebih baik tentang hal yang sama:
UserControl: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
Perbedaan antara halaman dan jendela sehubungan dengan WPF: Halaman vs Jendela di WPF?
sumber