2012-10-15 76 views
1

我正在使用應用程序名稱和返回按鈕的新項目基本模板。 它正在「空白」項目中使用。Windows 8應用程序。返回按鈕不起作用

但是,後退按鈕沒有響應觸摸事件。

以下是生成的代碼。後退按鈕就會消失。

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

我甚至嘗試製作自己的Click Handle,並嘗試導航自己。

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

然而,這是行不通的。可能是由於自動生成的東西,因爲我可以自己創建一個按鈕並將其連接起來(所以我真的試圖堅持模板)。

有什麼想法嗎?

編輯: 我發現它真的很奇怪沒有導航工作。鑽一些後,它似乎是與LayoutAwarePage的東西。我在這裏錯過了一些東西。將發佈更新。

編輯:對不起。我添加了事件點擊偵聽器(我必須刪除該複製)。但是,這仍然不能解決我的問題。我嘗試將後退按鈕設置爲「GoBack」功能,當您點擊後退按鈕時,它就會消失。我也嘗試創建我自己的方法並嘗試導航自己,但仍然無法工作。

+0

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

C#代碼你的意思是空白應用程序模板?或者你在談論一個Visual Basic項目? – devhammer

+0

不可以。您可以創建一個新項目並選擇「基本頁面」作爲模板。但是,我確實使用「空白應用程序」創建了該項目。 –

回答

2

你不需要編寫任何自己的代碼來啓用後退按鈕,因爲它會自動連接到底層的導航框架。如果後堆棧中有一個頁面導航到,後退按鈕將被啓用。

從我所看到的情況來看,缺少的是如果您在添加的基本頁面上啓動應用程序,導航框架的後臺堆棧中沒有任何內容可供您導航。

我使用以下步驟測試您的方案:

  1. 我使用空白應用程序模板創建一個新的C#/ XAML的Windows商店應用。
  2. 然後添加一個新的基本頁面(BasicPage1.xaml)。
  3. 打開MainPage.xaml,並在頁面中添加了一個按鈕。
  4. 雙擊該按鈕,並將以下代碼添加到單擊事件處理程序中:

    this.Frame。導航(typeof運算(BasicPage1));

運行項目,後退按鈕按預期工作。

+0

謝謝。這看起來像我將不得不重新開始。我可能已經改變了一些重要的東西,不知道是什麼,同時學習如何編程Windows。 –

+0

沒有發現它沒有發生的原因。我剛剛重新創建了一個新項目並稱爲base.NavigateTo一切正常。 –

+0

很高興你能工作! – devhammer

2

從我看到的XAML標記中,沒有任何Click事件處理函數綁定到該按鈕,因此除非您將其綁定到一個,否則不會執行任何操作。

+0

我嘗試使用「GoBack」方法並創建一個名爲navigate的我自己的偵聽器。仍然沒有運氣。它可能與我如何設置項目有關嗎? –

4

您需要按鈕上的Click事件處理程序。 Click="GoBack"

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

GoBack功能在LayoutAwarePage可這是最有可能的基類的網頁,如果沒有確保它是。 LayoutAwarePage班級裏面有Project\Common

+0

謝謝。我確實有,但必須刪除它張貼。加倍檢查它在那裏,但它仍然無法正常工作。從我看到的「GoBack」函數必須被覆蓋,這意味着我不應該創建它。只需讓按鈕調用它即可。正確? –

+1

如果不確定它是否是''LayoutAwarePage'',最有可能是你的頁面的基類,'GoBack'函數是可用的。 'LayoutAwarePage'類存在於'Project \ Common'裏面 – Mayank

+0

@Mayank您對'LayoutAwarePage'的評論很重要。這應該是你答案的一部分。 – Nathan

1

嗯,這種方法似乎需要從基本頁面的代碼。你能確認你是從LayoutAwarePage而不是從Page繼承嗎?否則,GoBack不會以這種方式實現。另外,如果您還沒有從第一個頁面導航到另一個頁面,則無法進行回滾。最後(只是在這裏集思廣益),如果您通過設置框架本身而不是頁面(位於以前的位置)來訪問此頁面,則無法進行回滾。這將清除導航歷史記錄。

而且,你能證實這不起作用嗎?

this.Frame.GoBack(); 

祝你好運!

+0

我確定我正在擴展LayoutAwarePage。 我試圖讓我的主頁從LayoutWarePage擴展(因爲它現在是頁面現在),並打破了我的導航。這個問題無疑是與LayoutAwarePage有關的。也許有些東西只是錯誤配置(不知道在哪裏)。我可能只需要創建一個新項目並重試。謝謝 –

0

我剛剛和Frank有同樣的問題。我發現我的問題是我沒有調用基類的(LayoutAwarePage)處理程序也忽略了OnNavigatedTo處理程序。這意味着LayoutAwarePage沒有設置它在其OnNavigatedFrom處理程序中使用的_pageKey成員變量。

希望這可以幫助他人解決同樣的問題。

0

這也發生在我身上。我知道我的代碼中沒有任何東西可以改變,所以我檢查了項目屬性。在Common Properties-> References中,我注意到一個異常,有一些永遠不存在的資源(我在該項目中應該有的是Windows RunTime的SQLite)。然後我刪除了不需要的資源並修復了導航問題。

0

如果您使用

Frame.SetNavigationState("1,0"); 

你取下手機堆棧條目,因此返回按鈕將無法正常工作。

1

林讓我後退按鈕這樣的:

XAML代碼。在這種情況下LoginPage.xaml。在LoginPage.xaml.cs

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

您能否解釋更多您的解決方案? – abarisone

相關問題