如何在winform中做导航,如何重定向界面,就产生了争执。

是用window还是Page还是UserControl?

先不管用啥。我们先比较一下各自的优缺点。

在WPF中使用导航,内容被组织在Page元素中,Page能寄宿在NavigationWindow或者Frame。

  这些容器能提供一种从页到页的导航,一本记录所有导航的日志,及一系列导航相关事件。

下面说说区别:

Window 对象正是这听起来像:为您的应用程序创建了一个新的 窗口。 你应该使用它当你想要弹出一个全新的窗口。基于用户操作的改变, 我经常使用不止一个 窗口弹出啥的。因为我喜欢将动态内容在主窗口。

Page 是一个页面在窗口。 它主要是用于基于web的系统像一个XBAP,你有一个单独的浏览器窗口,窗口可以驻留在不同的页面。 它也可以用于 导航应用程序 ,她包含了一个frame,就跟iframe似地 。

一个 UserControl 是一个可重用的用户创建的控制,您可以添加到您的UI以同样的方式你会添加任何其他控制。一下情况我会用用户控件。

1、 当我想要建立在一些自定义功能(例如,一个 CalendarControl)

2、当我有大量相关的XAML代码,如 视图当使用MVVM设计模式。

当导航窗口之间,您可以简单地创建一个新的 窗口对象和显示它

var NewWindow = new MyWindow();
newWindow.Show();

但就像我说的这个答案的开始,我宁愿不来管理多个窗口,如果可能的话。

我的导航的首选方法是创建一些动态内容区域使用 ContentControl,和填充的 用户控件包含任何当前视图。

<Window x:Class="MyNamespace.MainWindow" ...>
   <DockPanel>
       <ContentControl x:Name="ContentArea" />
   </DockPanel>
</Window>

和在你的导航事件你可以简单使用

ContentArea.Content = new MyUserControl();

但是如果你使用WPF,我强烈推荐MVVM设计模式。 MVVM模式不大懂

最后我们选择使用Page做导航。

页面间导航。

1
2
3
4
   //Page1.xaml导航到Page2.xaml 
  Page2 p2 = new Page2(); 
  NavigationService.Navigate(p2); 
  //NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));

这个可以传递Page的参数的。

1
2
3
4
5
6
7
8
 //实例化要导航到的页面 
  Page2 p2 = new Page2("来自Page1.xaml的参数"); 
  //Page1.xaml导航到Page2.xaml 
  NavigationService.Navigate(p2); 
  //定义含参数构函,可用于接收其他页面传递信息 
  public Page2(string value):this() 
  { 
  Label1.Content = value
05-25 18:10