C# WPF第'页;的导航服务为空。如何在我的页面上获得导航服务?
我试图在代码中从一个页面导航到另一个页面:C# WPF第'页;的导航服务为空。如何在我的页面上获得导航服务?,c#,wpf,C#,Wpf,我试图在代码中从一个页面导航到另一个页面: if (Game.IsShopping) NavigationService.Navigate("ShopPage.xaml", Game.CurrentShop); 然而,我在NavigationService上得到一个null引用异常,表示我当前页面的属性为null。为什么会这样?如何在我的页面上获得导航服务?首先设置一个框架(在xamel主窗口中呈现) 或者,如果您在控制器操作代码块内,请使用下面的命令 void ExampleCont
if (Game.IsShopping)
NavigationService.Navigate("ShopPage.xaml", Game.CurrentShop);
然而,我在NavigationService上得到一个null引用异常,表示我当前页面的属性为null。为什么会这样?如何在我的页面上获得导航服务?首先设置一个框架(在xamel主窗口中呈现)
或者,如果您在控制器操作代码块内,请使用下面的命令
void ExampleControllButton_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new Uri("ShopPage.xaml", Game.CurrentShop));
}
找到解决方案:我为NavigationService创建了一个包装器:
public static class Navigator
{
private static NavigationService NavigationService {get;} = (Application.Current.MainWindow as MainWindow).mainFrame.NavigationService;
public static void Navigate(string path, object param = null)
{
NavigationService.Navigate(new Uri(path, UriKind.RelativeOrAbsolute), param);
}
public static void GoBack()
{
NavigationService.GoBack();
}
public static void GoForward()
{
NavigationService.GoForward();
}
}
我无法从框架中包含的页面访问窗口中的框架。我需要把电话转到其他地方导航服务吗?如果是这样的话,我该如何从页面上称呼它?或者我的做法完全错了?只需添加包含上述框架的dockpanel标记,然后调用框架,确保没有“网格”标记,然后调用mainFrm.NavigationService.Navigate(新Uri(“ShopPage.xaml”,Game.CurrentShop)),您可以从任何其他控制器调用它,正如我在上面向您展示的,“this”而不是frame,这取决于您的情况为什么添加DockPanel会使页面可以访问frame?这看起来真的很奇怪…Docker面板中的UI元素位于“Children属性”中,这就是为什么
void ExampleControllButton_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new Uri("ShopPage.xaml", Game.CurrentShop));
}
public static class Navigator
{
private static NavigationService NavigationService {get;} = (Application.Current.MainWindow as MainWindow).mainFrame.NavigationService;
public static void Navigate(string path, object param = null)
{
NavigationService.Navigate(new Uri(path, UriKind.RelativeOrAbsolute), param);
}
public static void GoBack()
{
NavigationService.GoBack();
}
public static void GoForward()
{
NavigationService.GoForward();
}
}