我的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()
方法,以便我可以轻松地在页面之间切换。
关于我能做什么的任何想法?
感谢您的帮助,这让我疯了! :)
答案 0 :(得分:1)
我尝试手动更换XAML 使用NavigationWindow它运行正常, 但是NavigationService方法仍然存在 返回null
如果您的窗口已经是NavigationService
,则不需要NavigationWindow
。 NavigationWindow
有Navigate
方法。
您还可以使用标准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函数中有一些代码我希望执行。