如果传入参数,GoBack按钮不起作用

时间:2013-04-08 13:34:49

标签: c# xaml windows-8

我创建了一个非常简单的项目来测试导航。以下是步骤。

  1. 创建空白应用程序(XAML / C#)项目。
  2. 将基本页面“PageTwo”添加到项目中。
  3. 将HyperlinkBut​​ton和TextBox添加到MainPage。
  4. 在MainPage的代码隐藏中,使用Frame.Navigate方法导航到PageTow并传递TextBox的Text作为参数。
  5. 覆盖PageTwo的OnNavigatedTo方法以获取传递的参数。
  6. 运行项目,将一些文本输入到TextBox并单击按钮到PageTwo,它运行良好,但是如果我从PageTwo单击内置的Back Button,我会得到一个异常:Value不能为null。如果我对覆盖OnNavigatedTo方法进行注释,则返回按钮可以将我引导到主页面,无一例外。

    任何人都可以提供帮助吗?

    MainPage.xaml中:

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel>
            <TextBox Width="200" Name="TB"/>
            <HyperlinkButton Content="Go to PageTwo" Click="HyperlinkButton_Click_1"/>
        </StackPanel> 
    </Grid>
    

    MainPage.xaml.cs中:

    private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(PageTwo), TB.Text);
        }
    

    PageTwo.xaml:

    <TextBlock Name="TB" Grid.Row="1"/>
    

    PageTwo.xaml.cs:

    protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            TB.Text = e.Parameter as string;
        }
    

1 个答案:

答案 0 :(得分:1)

通常,当覆盖任何UI方法时,您还需要调用基础。

如果我将 PageTwo.xaml.cs 覆盖OnNavigatedTo更改为以下内容,则代码不会导致异常:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    TB.Text = e.Parameter as string;
    // call base method
    base.OnNavigatedTo(e);
}