2

我的 WPF 应用程序变得非常痛苦。我创建了一个窗口,并希望在单击按钮时加载另一个页面。我以为这很简单,但似乎并非如此。我设法通过使用加载另一个页面this.content = new UserPage()。但是,从这个用户页面,我无法回到我的主窗口。我不能使用this.content,因为窗口不能是孩子。

因此,我四处搜索,发现我应该使用 NavigationService 来让事情变得更容易。我尝试使用NavigationService.GetNavigationService(this),但这不起作用,因为它总是返回 null。我认为这是因为我的主窗口源自Window而不是NavigationWindow. 有没有办法在不重新启动项目的情况下将我的 Window 转换为 NavigationWindow?每当我创建一个新文件时,都没有 NavigationWindow 模板 - 只有 Window、Page、User Control 等...

我尝试用 NavigationWindow 手动替换 XAML,它运行良好,但 NavigationService 方法仍然返回 null。顶部还有一个带有向后和向前箭头的栏(均已禁用),但我真的不需要这个。我只想使用该Navigate()方法,以便我可以轻松地在页面之间切换。关于我能做什么的任何想法?

感谢您的帮助,这让我发疯了!:)

4

3 回答 3

1

我尝试用 NavigationWindow 手动替换 XAML,它运行良好,但 NavigationService 方法仍然返回 null

如果您NavigationService的窗口已经是NavigationWindow. NavigationWindowNavigate方法。

您还可以使用标准WindowFrame对其进行控制。它的工作原理大致类似于 a NavigationWindow,只是它嵌入在一个窗口中

于 2010-08-15T13:33:14.563 回答
1

斯科德,

我不确定您要做什么,但我会看看我是否可以提供帮助。首先,听起来你想要一个 NavigationWindow。如果您的应用程序中只需要一个页面,那么您的第一种方法将起作用,但是当您谈论多个页面并希望从一个页面移动到另一个页面时,您正在谈论的是 NavigationWindow。

其次,一旦您选择了导航窗口,XAML 应该是直截了当的,只需将 Window 替换为 NavigationWindow 就可以了,除非您现在需要意识到您将不再直接控制窗口的内容。相反,内置 NavigationService 将处理此问题。哦,您不需要创建显式 NavigationService,因为该类已经提供了一个。您只需要导航:

 this.Navigate(new Url("pack://aplication:,,,/MyAssembly,component/MyPage.xaml", UriKind.Absolute));

或者,使用可以使用 XAML:

Source = "pack://aplication:,,,/MyAssembly,component/MyPage.xaml"

此时,您将需要一些界面来允许您的用户从一个页面进入下一页面(例如面包屑控件或 TreeView),但是一旦他们在那里,内置的旅行控件将允许您浏览日志,即为您自动维护。也就是说,导航的大部分基本工作都是为您完成的,您只需要弄清楚用户如何向前导航到某些内容。

但在这一点上,事情会变得很奇怪。我自己遇到了这个。由于您无法向框架中显式添加网格或任何其他内容,因此您需要更改 NavigationWindow 的模板以添加构成普通应用程序的额外控件。诸如菜单和工具栏之类的东西不是标准 WPF 导航窗口的一部分。

原谅这种无耻的自我推销,但我开发了一个产品,因为我遇到了这些限制并且市场上没有任何可用的东西。您可以在以下位置查看演示:

http://www.teraque.com/products/explorer-chrome-suite/

它被设计成微软免费赠送的 WPF NavigationControl 的专业版。看一下演示,如果您不想购买套件,如果这是您想要应用程序的方向,我很乐意给予指点。

真挚地,

唐纳德·罗伊·艾雷

donald.roy.airey@teraque.com

于 2011-02-14T00:15:39.383 回答
0

我已经这样做了,但无法弄清楚如何从位于框架中的页面中的 vb.net 语句重新加载父窗口。我希望执行的 window_loaded 函数中有一些代码。

于 2010-08-16T01:49:49.157 回答