Bir Window nesnesi tam olarak göründüğü gibidir: Windowuygulamanız için yeni bir özelliktir. Tamamen yeni bir pencere açmak istediğinizde kullanmalısınız. WindowWPF'de sık sık birden fazla kullanmıyorum çünkü ana pencereme kullanıcı işlemlerine göre değişen dinamik içerik koymayı tercih ediyorum.
Bir Sayfa senin pencere içinde bir sayfadır. Çoğunlukla tek bir tarayıcı pencerenizin olduğu ve farklı sayfaların o pencerede barındırılabildiği XBAP gibi web tabanlı sistemler için kullanılır. Ayrıca sellmeadog gibi Navigasyon Uygulamalarında kullanılabilir dedi .
Bir UserControl Eğer kullanıcı arayüzüne başka kontrolünü eklersiniz aynı şekilde ekleyebileceğiniz yeniden kullanılabilir bir kullanıcı tarafından oluşturulan kontrolüdür. Genellikle UserControlbazı özel işlevsellik (örneğin, a CalendarControl) oluşturmak istediğinizde veya ViewMVVM tasarım desenini kullanırken olduğu gibi ilgili XAML kodunun büyük bir miktarına sahip olduğumda bir oluşturuyorum.
Pencereler arasında gezinirken yeni bir Windownesne oluşturabilir ve onu gösterebilirsiniz.
var NewWindow = new MyWindow();
newWindow.Show();
ama bu cevabın başında söylediğim gibi, mümkünse birden fazla pencereyi yönetmemeyi tercih ederim.
Tercih ettiğim gezinme yöntemim, a kullanarak bazı dinamik içerik alanı oluşturmak ContentControlve bunu UserControlgeçerli görünümün bulunduğu bir içerikle doldurmaktır .
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
ve navigasyon etkinliğinizde bunu kullanarak
ContentArea.Content = new MyUserControl();
Ancak WPF ile çalışıyorsanız, MVVM tasarım desenini şiddetle tavsiye ederim. Blogumda , bu kalıbı kullanarak MVVM kullanarak nasıl gezineceğinizi gösteren çok temel bir örneğim var:
<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>
