在WPF中创建页面或窗口

11

我是初次使用WPF。我想要创建一个程序,内容如下: - 应用程序打开后有一个按钮 - 用户单击按钮会进入到一个新页面,并显示各种输入框。

我对如何实现这个功能感到困惑。我尝试打开一个新窗口,但我不想打开一个新窗口,我想它都在一个窗口内完成。我还尝试创建一个新页面并使用NavigationService导航到它,但无法使其正常工作。

基本上,我想要创建一个工作流程,在该工作流程中,用户输入一些信息,然后点击下一步按钮,然后进入到一个新页面以输入更多信息。有人能指点我正确的方向吗?

4个回答

12

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

例如,如果你的应用程序中有两个页面,分别为“Page1”和“Page2”,则可以在 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的属性。例如,如果Page2有一个公共的“CurrentItem”属性,你可以这样说:

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

使用基于Uri的语法是无法做到那样的。

你也可以创建各种页面(Page1,Page2等)的实例并将它们存储在应用程序对象中,然后像这样切换到它们:

  NavigationService.Navigate(App.Page2);
这样做的好处是,如果你以后导航到Page2,你将得到完全相同的Page2对象。 或者你也可以使用NavigationService的日志记录功能来帮助实现这一点。

这样做的好处是,如果您稍后导航到Page2,您将获得完全相同的Page2对象。或者您也可以使用NavigationService的日志记录功能来帮助实现这一点。


仅为补充,附上一个演示示例:https://learn.microsoft.com/zh-cn/dotnet/framework/wpf/getting-started/walkthrough-my-first-wpf-desktop-application - Cody Ferguson

2
起初,似乎在使用Pages或Windows时没有太大的区别。然而,从应用程序的预期目标来看,我建议使用UserControls而不是Pages,因为Pages似乎专注于Web相关的内容,尽管它们也可以用于独立应用程序。另一个论点在另一篇文章中提出,指出在使用Page时,承载它的NavigationWindow不会记住导航到的内容实例,因此需要其他WPF技术将该内容存储在您的导航历史记录中。参考MSDN文档
NavigationWindow不会在导航历史记录中存储内容对象的实例。相反,每次使用导航历史记录导航到内容对象时,NavigationWindow都会创建一个新的内容对象实例。这种行为旨在避免在导航到大量和大型内容时出现过多的内存消耗。因此,内容的状态不会从一次导航记住到下一次导航。然而,WPF提供了几种技术,可以在导航历史记录中为内容存储一些状态。
如果您的目标是创建本机应用程序,使用UserControl就不会有这个问题。您可以下载this模板作为使用UserControls的示例。

2
使用 NavigationService 是正确的方法。您需要为窗口添加一个框架来显示页面,然后使用 NavigationService 在它们之间进行导航。

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

0

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

Application.Current.MainWindow = new SecondWindowToBeDisplayed();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接