这是我的MainWindow
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="5*" />
<RowDefinition />
</Grid.RowDefinitions>
<Label Grid.Row="0">This is Page 1</Label>
<Button Grid.Row="1" Content="Next" Click="Next_Click" />
</Grid>
</Window>
我有另一个名为Page2的页面
<Page x:Class="WpfApplication1.Page2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="Page2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="5*" />
<RowDefinition />
</Grid.RowDefinitions>
<Label Grid.Row="0">This is Page 2</Label>
</Grid>
</Page>
在MainWindow的下一个按钮上,我想导航到Page2。为此,我有关于该按钮的事件处理程序。
private void Next_Click(object sender, RoutedEventArgs e)
{
NavigationService nav = NavigationService.GetNavigationService(this);
nav.Navigate(new Uri("Page2.xaml", UriKind.RelativeOrAbsolute));
}
但是调用NavigationService.GetNavigationService(this)返回null。我做错了什么?
答案 0 :(得分:1)
问题是您是从窗口请求Navegation服务。 WPF有两个导航器: NavigationWindow 和Frame。这种窗口和控件具有处理内容导航的NavigationService。 例如,在窗口中,您可以使用框架,如下所示:
<Window
x:Class="NavigationSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
>
<StackPanel>
<Frame x:Name="_mainFrame" />
</StackPanel>
然后,在您的代码开始时,您可以执行以下操作:
_mainFrame.Navigate(new Page1());
另一个变体是直接使用NavigationService属性:
_mainFrame.NavigationService.Navigate(new Page1());
点击此链接,了解GetNavegationService方法的工作原理:NavigationService.GetNavigationService Method
您可以在此处找到更多信息:Navigation