NavigationWindow - 它在哪里?

时间:2010-08-15 13:23:41

标签: c# wpf navigation navigationwindow

我的WPF应用程序正在成为一个真正的痛苦。我创建了一个窗口,并希望在单击按钮时加载另一个页面。我认为这将是直截了当的,但似乎并非如此。我设法使用this.content = new UserPage()加载其他页面。但是,从这个UserPage,我无法回到我的主窗口。我不能使用this.content因为窗口不能是孩子。

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

我尝试用NavigationWindow手动替换XAML并且运行正常,但NavigationService方法仍然返回null。顶部有一个酒吧,前后箭头(都是禁用的),但我真的不需要这个。我只想使用Navigate()方法,以便我可以轻松地在页面之间切换。 关于我能做什么的任何想法?

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

3 个答案:

答案 0 :(得分:1)

  

我尝试手动更换XAML   使用NavigationWindow它运行正常,   但是NavigationService方法仍然存在   返回null

如果您的窗口已经是NavigationService,则不需要NavigationWindowNavigationWindowNavigate方法。

您还可以使用标准Window并对其进行Frame控制。它大致类似于NavigationWindow,除了它嵌入在一个窗口中

答案 1 :(得分:1)

Skoder,

我不确定你要做什么,但我会看看能不能帮忙。首先,听起来你想要一个NavigationWindow。如果你只想在你的应用程序中使用一个页面,那么你的第一个方法就可以了,但是当你谈论多个页面并希望从一个页面移动到另一个页面时,你就是在谈论一个NavigationWindow。

其次,一旦你选择了一个导航窗口,XAML应该是直截了当的,只需用NavigationWindow替换Window,你应该好好去,除非你现在需要意识到你将不再直接控制窗口的内容。相反,内置的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 NavigationWindow的一部分。

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

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

它被设计成微软免费提供的WPF NavigationControl的专业版。看看演示,如果你不想购买套件,我很乐意提供指示,如果这是你想要申请的方向。

此致

唐纳德罗伊艾瑞

donald.roy.airey@teraque.com

答案 2 :(得分:0)

我已经完成了但是还没有弄清楚如何从位于框架中的页面中的vb.net语句重新加载父窗口。 我在window_loaded函数中有一些代码我希望执行。