簡體   English   中英

為什么我的模態頁面有后退按鈕?

[英]Why does my modal page have a back button?

項目和問題解釋

在我的情況下,我有一個頁面,指示用戶如何移動某台機器。 此頁面應該是模態頁面,因為在不執行或完全取消操作的情況下不應導航頁面。

在此輸入圖像描述 我有一個帶有列表視圖的主頁,通過點擊onSelect方法打開列表視圖中包含的任何項目的詳細信息頁面:

Navigation.PushAsync(new FooPage(string Name)); /* gets called in the 
onSelect method if selection is not null*/

在將名稱傳遞給詳細信息頁面的viewmodel之后,在模型中檢索該模型,然后使用注入到viewmodel中的模型管理器來檢索它。

- 我們現在都在堆棧上有一個主頁和詳細信息頁面,其中只有詳細信息頁面有一個后退按鈕 -

在詳細信息頁面上,我們有一個名為“Teach”的按鈕,在單擊它之后旁邊有ax,y,z字段,此方法被調用:

private async Task Button_Clicked(object sender, EventArgs e)
        {
            await Navigation.PushModalAsync(new ManualTeachPage());
        }

然后,它應該創建頁面,但由於某種原因決定添加一個后退按鈕: Uwp后退按鈕是可見的

調試和研究

此行為在Android上不可見,此頁面上沒有可見的后退按鈕或導航欄,但在詳細信息頁面上也有后退按鈕。

我之前使用過模態頁面,但我從未見過這種行為,我嘗試過使用Application.Mainpage本身的Navigation屬性,除了一個案例外,結果完全相同。

我認為這可能與我在某一點切換Application.Mainpage有關(用戶必須經過一堆教程頁面),似乎在設置新主頁之后調用pushModalAsync一行然后它就行了將頁面作為模態頁面推送並執行一個(沒有后退按鈕)但在此之后不執行此操作。

就我所見,沒有關於Bugzilla的錯誤報告,我沒有在互聯網上找到關於這個特定問題的任何內容。

請注意,單擊教學頁面上的后退按鈕時,它將返回到詳細信息頁面。 當teachPage被推送時,它實際上被推送到ModalStack。

更新1

再次檢查我所談論的模態頁面是模態堆棧上唯一的模態頁面,它是。 NavigationPage.SetHasBackButton(this,false); 似乎沒有按照Diego Rafael Souza的建議工作。

更新2

我想我會在教學頁面中使用onBackButtonPressed暫時禁用后退按鈕,直到找到解決方案。 事實證明這不再適用於UWP,此方法不再在此頁面或任何頁面上調用此方法。 它雖然適用於Android硬件按鈕。

更新3

我試過用:

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
AppViewBackButtonVisibility.Collapsed;

這確實隱藏了UWP上的后退按鈕但由於某種原因#if WINDOWS_UWP根本不起作用。 如果我在沒有#if的情況下執行此操作,程序將無法為Android構建。 還沒有解決方案,不僅如此,但在使用此修復程序時,其他頁面仍然禁用了onBackButtonPressed方法。

更新4

在更新到最新版本的xamarin表單后,OnBackButtonPressed再次開始工作。 后退按鈕仍然顯示在頁面上,但我現在已禁用它。

重新創造問題

我在這個小測試項目中重新創建了這個問題: https//www.dropbox.com/sh/6btsud3uvw503ee/AAAiaGb3TwhMrZMJb2j-rd36a?dl = 0

在您的示例中的Button_Clicked()函數中,在調用Modal的頁面DetailPage ,在調用PushModalAsync(new TeachPage()); , 采用:

NavigationPage.SetHasNavigationBar(this, false);
NavigationPage.SetHasBackButton(this, false);

我的猜測是當你嘗試使用上面的SetHasBackButton ,你是在Modal本身上做的,但你實際看到的后退按鈕來自你的DetailPage。

添加此項后,模式會彈出,后退按鈕會消失。 如果在模態上設置“后退”按鈕以關閉它,則可以通過在DetailPage代碼隱藏中添加OnAppearing()函數輕松地將NavBar和BackButton返回到DetailPage中:

protected override void OnAppearing()
{
    base.OnAppearing(); // do the usual stuff OnAppearing does
    NavigationPage.SetHasNavigationBar(this, true); //get your navbar back
    NavigationPage.SetHasBackButton(this, true); //get your back button back
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM