Windows 8应用程序。后退按钮不起作用

时间:2012-10-15 21:32:02

标签: xaml windows-8 microsoft-metro

我正在使用带有应用名称和后退按钮的新项目基本模板。 它正在“空白”项目中使用。

但是,后退按钮不响应触摸事件。

以下是生成的代码。后退按钮就消失了。

<Button x:Name="backButton" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource BackButtonStyle}" Click="GoBack"/>

我甚至尝试制作自己的Click Handle并试着自己导航。

this.Frame.Navigate(typeof(MainPage));

然而,这也不起作用。可能是由于自动生成的东西,因为我可以自己创建一个按钮并将其连接起来(所以我真的试图坚持使用模板)。

有什么想法吗?

编辑: 我发现很奇怪导航没有工作。在钻了一些之后,它似乎与LayoutAwarePage有关。我在这里遗漏了一些东西。将发布更新。

编辑:对不起。我重新添加了事件点击监听器(我必须删除复制)。但是,这仍然无法解决我的问题。我尝试将后退按钮设置为“GoBack”功能,当您点击后退按钮时它就会消失。我也尝试创建自己的方法并尝试自我导航但仍然无效。

8 个答案:

答案 0 :(得分:4)

按钮上需要一个Click事件处理程序。 Click="GoBack"

<Button x:Name="backButton" Click="GoBack" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource BackButtonStyle}"/>

GoBack函数在LayoutAwarePage中可用,它很可能是您网页的基类,如果不确定的话。 LayoutAwarePage类位于Project\Common

答案 1 :(得分:2)

从我看到的XAML标记中,没有Click事件处理程序与该按钮绑定,因此除非您将其挂钩,否则不会采取任何操作。

答案 2 :(得分:2)

您不需要编写任何自己的代码来启用后退按钮,因为它会自动连接到底层导航框架。如果后堆栈中有一个页面要导航,则会启用后退按钮。

我所看到的缺点是,如果您在添加的基本页面上启动应用程序,导航框架的后备堆栈中没有任何内容供您导航。

我使用以下步骤测试了您的方案:

  1. 我使用Blank App模板创建了一个新的C#/ XAML Windows应用商店应用。
  2. 然后添加了一个新的基本页面(BasicPage1.xaml)。
  3. 打开MainPage.xaml,并在页面中添加了一个按钮。
  4. 双击该按钮,并将以下代码添加到click事件处理程序:

    this.Frame.Navigate(typeof运算(BasicPage1));

  5. 跑完项目,后退按钮按预期工作。

答案 3 :(得分:1)

嗯,这种方法似乎从Basic页面获取代码。你能否确认你是从LayoutAwarePage继承而不是从Page?否则GoBack没有以这种方式实现。此外,如果您没有首先从另一个页面导航,则不能GoBack。而且,最后(只是在这里集思广益),如果你通过设置Frame本身而不是页面(在之前的位置)到达此页面,则不能GoBack。这将清除导航历史记录。

而且,你能否确认这不起作用?

this.Frame.GoBack();

祝你好运!

答案 4 :(得分:1)

我按下这样的按钮:

XAML代码。在这种情况下LoginPage.xaml。

<Button x:Name="ButtonGoBack" Click="ButtonGoBack_OnClick" Style="{StaticResource NavigationBackButtonNormalStyle}"/>

LoginPage.xaml.cs中的C#代码

private void ButtonGoBack_OnClick(object sender, RoutedEventArgs e)
    {
        this.Frame.GoBack();
    }

答案 5 :(得分:0)

我和弗兰克有同样的问题。我发现我的问题是我在不调用基类(LayoutAwarePage)处理程序的情况下覆盖了OnNavigatedTo处理程序。这意味着LayoutAwarePage没有设置它在其OnNavigatedFrom处理程序中使用的_pageKey成员变量。

希望这可以帮助其他人解决同样的问题。

答案 6 :(得分:0)

这也发生在我身上。我知道我的代码中没有任何改变,所以我检查了项目属性。在Common Properties-&gt; References中我注意到一个异常,有一些资源从未出现过(我在该项目中应该拥有的只是SQLite for Windows RunTime)。然后我删除了不需要的资源并修复了导航问题。

答案 7 :(得分:0)

如果您使用

Frame.SetNavigationState("1,0");

您删除了后堆栈条目,因此后退按钮将无法正常工作。