2010-06-16 68 views
6

我是使用WPF的新手。我有我想要创建的以下程序: - 应用程序打开时只有一个按钮 - 用户单击按钮,它会将它们带到具有各种输入的新页面。在WPF中创建页面或Windows

我很困惑我需要如何做到这一点。我尝试打开一个新窗口,但我不想打开一个窗口,我希望它是一个窗口。我试图创建一个新的页面,并使用NavigationService导航到它,但无法让它工作。

基本上我想创建一个工作流,用户输入一些东西,点击下一个按钮,并进入一个新的页面输入一些更多的信息。任何人都可以将我指向正确的方向吗?

回答

7

在您的应用程序中使用页面并使用NavigationService在它们之间切换。

例如,如果你在你的paplication两页,“第一页”和“第2页”,可以包括的Page1.xaml如下:

<Button Content="Next" Click="NextClicked" /> 

,这在您的Page1.xaml.cs:

void NextClicked(object sender, RoutedEventArgs e) 
{ 
    NavigationService.Navigate(new Page2()); 
} 

另外,您可以使用此:

NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative)); 

一般来说是比较容易做的第一,因为ÿ你也可以设置Page2的属性。例如,如果第2页有一个公共的“CURRENTITEM”属性,你可以说:

NavigationService.Navigate(new Page2 { CurrentItem = this.Something }); 

你不能做到这一点与基于URI语法。

你也可以创建(第1页,第二页等),各个页面的实例,并将它们存储在你的应用程序对象,然后切换到它们是这样的:

NavigationSerivce.Navigate(App.Page2); 

这样,如果你曾经浏览到第二页以后你会得到完全相同的Page2对象。或者,您可以使用NavigationService的日记功能来帮助完成此操作。

1

使用NavigationService是正确的方法。您必须在窗口中添加一个框架来显示您的页面,然后使用NavigationService在它们之间导航。

+0

我该怎么做?例如,我在我的主窗口中有一个表单,指向Page1.xaml的一个Source。 在Page1.xaml我有一个按钮,并在点击事件中使用了以下代码: this.NavigationService.Navigate(“Page2.xaml”); 这似乎只是在页面上显示文本“Page2.xaml”,而不是实际的页面。 – cmptrer 2010-06-16 21:54:52

0

您可以将应用程序对象的MainWindow引用更改为另一个Window对象。

Application.Current.MainWindow = new SecondWindowToBeDisplayed(); 
2

最初似乎没有什么应该使用的偏好有很大的不同:页面或Windows。然而,考虑到应用程序的预期目标,我建议使用UserControl而不是Pages,因为Pages似乎专注于与Web相关的内容,尽管它们也可以用于独立应用程序。在another post中提出的另一个说法是指MSDN-documentation,并指出在使用它所托管的Page的NavigationWindow不记得导航到的内容的实例,因此需要其他WPF技术将该内容存储在导航历史记录中。

NavigationWindow不在导航历史记录中存储内容对象的实例。相反,NavigationWindow每次使用导航历史记录导航时都会创建一个新的内容对象实例。此行为旨在避免在导航到大量内容和大量内容时消耗过多的内存。因此,内容的状态不会从一个导航记录到下一个导航。但是,WPF提供了几种技术,您可以通过它们为导航历史记录中的一段内容存储一段状态。

如果您使用UserControl,那么如果您的目标是创建本机应用程序,则不会出现该问题。您可以下载this模板作为示例以代替使用UserControl。