C# 导航窗口-它在哪里?

C# 导航窗口-它在哪里?,c#,wpf,navigation,navigationwindow,C#,Wpf,Navigation,Navigationwindow,我的WPF应用程序正在成为一个真正的难题。我已经创建了一个窗口,希望在单击按钮时加载另一个页面。我以为这会很简单,但事实似乎并非如此。我使用this.content=new UserPage()加载另一个页面。然而,从这个用户页面,我无法回到我的主窗口。我无法使用this.content,因为该窗口不能是子窗口 因此,我四处搜索,发现我应该使用NavigationService使事情变得更简单。我尝试使用NavigationService.GetNavigationService(this),但

我的WPF应用程序正在成为一个真正的难题。我已经创建了一个窗口,希望在单击按钮时加载另一个页面。我以为这会很简单,但事实似乎并非如此。我使用
this.content=new UserPage()
加载另一个页面。然而,从这个用户页面,我无法回到我的主窗口。我无法使用
this.content
,因为该窗口不能是子窗口

因此,我四处搜索,发现我应该使用NavigationService使事情变得更简单。我尝试使用
NavigationService.GetNavigationService(this)
,但它不起作用,因为它总是返回null。我想这是因为我的主窗口是从
window
派生的,而不是
NavigationWindow
。有没有一种方法可以将我的窗口转换为NavigationWindow,而无需再次启动项目?每当我创建一个新文件时,没有NavigationWindow模板-只有窗口、页面、用户控件等

我尝试用NavigationWindow手动替换XAML,它运行良好,但NavigationService方法仍然返回null。在顶部有一个带有前后箭头的横杆(两个都被禁用),但我真的不需要这个。我只想使用
Navigate()
方法,以便在页面之间轻松切换。 关于我能做什么有什么想法吗

谢谢你的帮助,这让我快发疯了

我尝试手动替换XAML 使用NavigationWindow,运行良好, 但是NavigationService方法仍然存在 返回空值

如果您的窗口已经是
导航窗口
,则不需要
导航服务<代码>导航窗口
有一个
导航
方法


您还可以使用标准的
窗口
,并在其上放置
框架
控件。它的工作原理大致类似于一个
导航窗口
,只是它嵌入到一个窗口中

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

Skoder

我不确定你想做什么,但我会看看我能不能帮上忙。首先,听起来你想要一个导航窗口。如果您的应用程序中只需要一个页面,那么您的第一种方法将起作用,但当您谈论多个页面并希望从一个页面移动到另一个页面时,您正在谈论一个导航窗口

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

 this.Navigate(new Url("pack://aplication:,,,/MyAssembly,component/MyPage.xaml", UriKind.Absolute));
或者,可以使用XAML:

Source = "pack://aplication:,,,/MyAssembly,component/MyPage.xaml"
此时,您需要一些界面来允许用户从一个页面转到下一个页面(例如面包屑控制或TreeView),但一旦用户到达,内置的行程控制将允许您浏览自动为您维护的日志。也就是说,导航的大部分基本工作都是为您完成的,您只需要了解用户如何导航到某些内容

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

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

它被设计成微软免费赠送的WPF NavigationControl的专业版本。看看这个演示,如果你不想购买这个套件,如果这是你想要应用程序的方向,我很乐意给出一些建议

真诚地

唐纳德·罗伊·艾利


唐纳德,罗伊。airey@teraque.com

谢谢您的回复。如何在窗口中插入框架?我有一个网格(包含整个布局),但当我在窗口中放置框架时,它会替换网格。有没有办法将框架插入现有窗口?感谢您在网格中输入框架。我试图把我的布局放在框架内。相反,我只是将框架放在可视化树的顶部,并调用了它的Navigate()方法,该方法似乎正在工作。谢谢你的帮助。嗨@ThomasLevesque有没有办法在MVVM中使用NavigateService?@ArijitMukherjee,是的,但是你应该将它抽象到一个界面后面,这样ViewModel就不会直接操作UI对象(并提高可测试性)。你在使用navigationservice.goback吗?