窗口与页面与UserControl的WPF导航?
我想知道有人能帮助我。 我是WPF的新手,目前正在编写一个桌面应用程序,但是当把某人redirect到应用程序的新部分时,我似乎无法理解要使用什么东西。
我的select似乎是
- 窗口
- 页
- 用户控件
但我不明白他们之间的区别是什么,什么时候我应该使用每一个。
有人可以解释我的差异,并举例说明你可以使用哪种情况/应用程序?
一个Window对象就是它的声音:它是你的应用程序的一个新Window
。 你应该使用它,当你想popup一个全新的窗口。 我不经常在WPF中使用多个Window
,因为我更喜欢在基于用户操作的主窗口中添加dynamic内容。
页面是您的窗口内的页面。 它主要用于基于networking的系统,如XBAP,您只有一个浏览器窗口,可以在该窗口中托pipe不同的页面。 它也可以用在导航应用程序,如sellmeadog说 。
UserControl是一个可重复使用的用户创build的控件,您可以添加到您的用户界面,就像添加其他控件一样。 通常,当我想要构build一些自定义function(例如CalendarControl
)时,或者在使用MVVMdevise模式时,如果有大量相关的XAML代码(如View
时,我会创build一个UserControl
。
在窗口之间导航时,您可以简单地创build一个新的Window
对象并显示它
var NewWindow = new MyWindow(); newWindow.Show();
但就像我在这个答案的开头所说的,如果可能,我宁愿不pipe理多个窗口。
我最喜欢的导航方法是使用ContentControl
创build一些dynamic内容区域,并使用包含当前视图的UserControl
填充该内容区域。
<Window x:Class="MyNamespace.MainWindow" ...> <DockPanel> <ContentControl x:Name="ContentArea" /> </DockPanel> </Window>
并在您的导航事件中,您可以简单地使用它
ContentArea.Content = new MyUserControl();
但是,如果你正在使用WPF,我会强烈推荐MVVMdevise模式。 我在我的博客上有一个非常基本的例子,它演示了如何使用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>
- 窗口就像
Windows.Forms.Form
,所以只是一个新的窗口 -
网页是根据在线文档 :
封装一个可导航到Windows Internet Explorer,NavigationWindow和Frame的内容页面。
所以你基本上使用这个,如果你去可视化一些HTML内容
-
UserControl是用于您想要创build一些可重用组件(但不是独立的组件)以在多个不同的
Windows
使用它的情况
一切取决于你正在试图build立的应用程序。 如果您正在构build基于对话框的应用程序,请使用Window
。 如果您正在构build基于导航的应用程序,请使用Pages 。 无论你走的方向如何, UserControl
都是有用的,因为你可以在Windows和Pages中使用它们。
开始探索的好地方是: http : //windowsclient.net/learn
我们通常为应用程序使用一个主窗口,其他窗口可用于需要popup窗口的情况,因为不使用XAML中不可见的popup窗口控件,而是使用在devise时可见的窗口,容易工作
另一方面,我们使用许多页面从一个屏幕导航到另一个像用户pipe理屏幕到订单屏幕等在主窗口,我们可以使用Fram控制导航像下面的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控件而不是Fram,并使用Dictionary添加页面,同时添加新页面检查控件是否已经存在,然后只能导航,否则添加和导航。 我希望这会帮助别人
大部分都发布了正确的答案。 我想添加几个链接,以便您可以参考他们,并有相同的清晰和更好的想法:
UserControl: http : //msdn.microsoft.com/en-IN/library/a6h7e207( v= vs.71).aspx
页面和窗口之间的区别WPF: 页面和WPF中的窗口?