Объект Window - это то, на что он похож: это новинка Window
для вашего приложения. Вам следует использовать его, когда вы хотите открыть совершенно новое окно. Я не часто использую более одного Window
в WPF, потому что я предпочитаю размещать динамическое содержимое в моем основном окне, которое изменяется в зависимости от действий пользователя.
Страница является страницей внутри окна. Он в основном используется для веб-систем, таких как XBAP, где у вас есть одно окно браузера, и в этом окне могут размещаться разные страницы. Его также можно использовать в навигационных приложениях, как сказал sellmeadog .
UserControl является многоразовым созданный пользователем элемент управления , который вы можете добавить в свой пользовательский интерфейс так же , как вы бы добавить любой другой элемент управления. Обычно я создаю, UserControl
когда хочу встроить некоторые настраиваемые функции (например, a CalendarControl
) или когда у меня есть большой объем связанного кода XAML, например, View
при использовании шаблона проектирования MVVM.
При перемещении между окнами вы можете просто создать новый Window
объект и показать его.
var NewWindow = new MyWindow();
newWindow.Show();
но, как я сказал в начале этого ответа, я предпочитаю по возможности не управлять несколькими окнами.
Мой предпочтительный метод навигации - создать некоторую область динамического содержимого с помощью a 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 />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ProductsViewModel}">
<local:ProductsView />
</DataTemplate>
</Window.Resources>
<DockPanel>
<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>
<ContentControl Content="{Binding CurrentPageViewModel}" />
</DockPanel>
</Window>