Объект 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>
AuditViewModel
содержащий все данные и функции для формы, и я бы нарисовал его, используя либоAuditView
UserControl, либо простоDataTemplate
ViewModel
Обычно создается дляView
, аModels
это объекты данных и классы («строительные блоки»), используемые вашим приложением (ViewModels
)TabControl.ItemsSource
к набору объектов и использую DataTemplates, чтобы сообщить WPF, как рисовать каждый тип объекта на каждой вкладке. Обычно что-то вроде этогоWindows.Forms.Form
, так что просто новое окноСтраница , согласно онлайн-документации :
Таким образом, вы в основном используете это, если собираетесь визуализировать некоторый HTML-контент
UserControl предназначен для случаев, когда вы хотите создать какой-либо повторно используемый компонент (но не автономный), чтобы использовать его в нескольких разных
Windows
источник
UserControl
в случае, если вы думаете, что тот же набор элементов управления, который вы собираетесь использовать в этом окне, вы будете использовать и в другом, поэтому вместо написания двойного кода просто создайтеUserControl
, а если нет, просто поместите элементы управления для визуализации ваши данные на самомWindow
себе, справа от кнопок, которые вы использовали.DataTemplates
. Они используются, когда вы хотите указать WPF, как рисовать элемент в определенной области. Например, если вы хотите нарисоватьButtons
круглые круги, вы можете просто использоватьDataTemplate
вместоUserControl
. Я обычно использую,UserControls
когда мне нужен новый элемент управления с собственными функциями или когда у меня много XAML для одного компонента, например дляView
. Для небольших фрагментов XAML, которые не требуют каких-либо специальных функций, вы должны использовать aDataTemplate
вместо созданияUserControl
Page
не HTML, а XAML. Тем не менее, элемент aPage
привязан к структуре навигации, которая концептуально аналогична тому, как осуществляется навигация в веб-браузере. (И страницы могут даже размещаться в браузере, если приложение является приложением XBAP.)Все зависит от приложения, которое вы пытаетесь создать. Используйте
Window
s, если вы создаете приложение на основе диалогов. ИспользуйтеPage
s, если вы создаете приложение на основе навигации .UserControl
s будут полезны независимо от того, в каком направлении вы идете, поскольку вы можете использовать их как в Windows, так и в Pages.Хорошее место для начала изучения здесь: http://windowsclient.net/learn
источник
Обычно мы используем One Main
Window
для приложения, а другие окна можно использовать в ситуациях, например, когда вам нужны всплывающие окна, потому что вместо использования всплывающих элементов управления в XAML, которые не видны, мы можем использовать окно, которое отображается во время разработки, так что это будет легко работать сс другой стороны, мы используем много страниц для перехода с одного экрана на другой, например, экран управления пользователями на экран заказа и т. д. В главном окне мы можем использовать
Frame
элементы управления для навигации, как показано ниже XAML<Frame Name="mainWinFrame" NavigationUIVisibility="Hidden" ButtonBase.Click="mainWinFrame_Click"> </Frame>
C #
private void mainWinFrame_Click(object sender, RoutedEventArgs e) { try { if (e.OriginalSource is Button) { Button btn = (Button)e.OriginalSource; if ((btn.CommandParameter != null) && (btn.CommandParameter.Equals("Order"))) { mainWinFrame.Navigate(OrderPage); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } }
Это один из способов сделать это. Мы также можем использовать Tab Control вместо Fram и добавлять к нему страницы с помощью словаря при добавлении новой страницы, проверять, существует ли уже элемент управления, а затем только перемещаться, в противном случае добавлять и перемещаться. Я надеюсь это кому-то поможет
источник
Больше всего отправил правильный ответ. Я хотел бы добавить несколько ссылок, чтобы вы могли ссылаться на них и иметь четкое и лучшее представление о том же:
UserControl: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
Разница между страницей и окном относительно WPF: страница против окна в WPF?
источник