Ответ 1
Объект Окно - это то, на что это похоже: его новый Window
для вашего приложения. Вы должны использовать его, когда хотите открыть совершенно новое окно. Я не часто использую более одного Window
в WPF, потому что предпочитаю помещать динамический контент в основное окно, которое изменяется в зависимости от действия пользователя.
A Страница - это страница внутри вашего окна. Он в основном используется для веб-систем, таких как XBAP, где у вас есть одно окно браузера, и в этом окне могут быть размещены разные страницы. Его также можно использовать в Приложениях для навигации, например sellmeadog.
A UserControl - это многопользовательский пользовательский элемент управления, который вы можете добавить в свой интерфейс так же, как и любой другой элемент управления. Обычно я создаю UserControl
, когда хочу создать некоторые пользовательские функции (например, 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>