Вікно об'єкт тільки те , що це звучить як: його нове Window
для вашого застосування. Ви повинні використовувати його, коли ви хочете спливати абсолютно нове вікно. Я не часто використовую більше ніж один Window
у WPF, тому що я вважаю за краще розміщувати динамічний контент у своєму головному вікні, який змінюється на основі дії користувача.
Сторінка є сторінкою всередині вікна. В основному він використовується для таких веб-систем, як XBAP, де у вас є одне вікно браузера, і в цьому вікні можуть розміщуватися різні сторінки. Він також може бути використаний у навігаційних програмах, як, наприклад, sellmeadog .
UserControl є багаторазовим створений користувачем елемент управління , який ви можете додати в свій користувальницький інтерфейс так само , як ви б додати будь-який інший елемент керування. Зазвичай я створюю те, UserControl
коли я хочу вбудувати якусь власну функціональність (наприклад, a CalendarControl
) або коли у мене є велика кількість пов'язаного коду XAML, наприклад, View
при використанні шаблону дизайну MVVM.
Переміщуючись між вікнами, ви можете просто створити новий Window
об’єкт і показати його
var NewWindow = new MyWindow();
newWindow.Show();
але, як я вже говорив на початку цієї відповіді, я вважаю за краще не керувати кількома вікнами, якщо це можливо.
Мій кращий спосіб навігації - це створити деяку динамічну область вмісту за допомогою а ContentControl
та заповнити її UserControl
вмістом, що містить поточний вигляд.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
і у події навігації ви можете просто встановити його за допомогою
ContentArea.Content = new MyUserControl();
Але якщо ви працюєте з WPF, я дуже рекомендую модель дизайну MVVM. У моєму блозі є дуже базовий приклад, який ілюструє, як ви переходите за допомогою MVVM, використовуючи цей шаблон:
<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>