C# 实例化navigationservice类

C# 实例化navigationservice类,c#,wpf,user-controls,C#,Wpf,User Controls,我今天在做一个WPF项目,它有一个主导航窗口,然后在这个主窗口中加载了4个页面(使用NavigationService.Nagivate…)。。在XAML中,这创建了大量重复代码,因此我想将菜单重构为一个用户控件,然后绑定到每个页面。我试图创建一个类来处理每个页面的导航和加载,但我发现NavigationServices是一个密封的类,无法实例化 请任何人提供一个建议/解决方案,说明如何创建一个带有菜单项的usercontrol,该菜单项允许导航到项目中的新页面。我已经能够在页面和直接代码背后做

我今天在做一个WPF项目,它有一个主导航窗口,然后在这个主窗口中加载了4个页面(使用NavigationService.Nagivate…)。。在XAML中,这创建了大量重复代码,因此我想将菜单重构为一个用户控件,然后绑定到每个页面。我试图创建一个类来处理每个页面的导航和加载,但我发现NavigationServices是一个密封的类,无法实例化

请任何人提供一个建议/解决方案,说明如何创建一个带有菜单项的usercontrol,该菜单项允许导航到项目中的新页面。我已经能够在页面和直接代码背后做到这一点,但我没有任何运气试图将两者分开。如果这是太模糊,请让我知道,我会提供更多的代码样本deails


提前感谢

在用户控件上创建NavigationService依赖项属性。然后,在实例化控件时,将此属性绑定到应该进行导航的容器的NavigationService。例如,页面可能会显示如下用户控件:

<local:NavBox NavigationService="{Binding NavigationService, RelativeSource={RelativeSource AncestorType={x:Type NavigationWindow}}}" />


现在,当您的UserControl在其NavigationService上调用Navigate时,将有效地在包含NavigationWindow的NavigationService上调用Navigate。(这可以通过明显的方式进行修改,以支持框架或页面而不是NavigationWindow。)

itowlson,我认为我遗漏了一些东西,因为当我在uc中创建方法来处理Navigation属性时,我得到一个异常,即该方法不能包含注释性参数。(我想)我遇到的问题是如何实例化NavigationService类,以便在我的类中允许每个菜单项导航到新页面。DP是如何影响此解决方案的?谢谢您无法实例化新的NavigationService。你需要做的是从已经拥有导航服务的人那里获得导航服务,并使用它。这就是绑定的用武之地:它为您提供了对容器导航服务的引用,您可以在该服务上调用Navigate。DP的出现是因为只有DPs可以成为绑定目标。关于“方法不能包含匿名参数”,你能发布你的代码和异常消息吗?我发布了一个示例解决方案,如果不是太麻烦的话,你能看看这个,让我知道应该在哪里设置和注册DP吗?它们会在用户控件本身中吗?另外,我也不是100%清楚你所说的从其他人那里得到服务是什么意思?我试着创建一个静态类,就像你在解决方案中看到的那样,除非我误解了这个语句。再次感谢您的建议。我认为你是正确的,这让我走上了正确的轨道,我只需要再多读一些-干杯,通过“从其他人那里获得服务”,我的意思是你的页面或导航窗口已经有了导航服务。因此,你可以使用他们的,而不是试图创建一个自己的。重新编码示例:您将在uc_menu.xaml.cs中声明NavigationService DP,并将单击处理程序更改为
this.NavigationService.Navigate(…)
。然后在Page1.xaml中,将绑定添加到
local:uc\u菜单
元素。