导航到另一页的问题

时间:2014-12-17 20:28:17

标签: c# wpf xaml navigation

这是我的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。我做错了什么?

1 个答案:

答案 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