c# - 在 Xamarin Forms 中显示模态对话框时,如何显示和设置 'BackButtonText' ?

标签 c# mvvm xamarin xamarin.forms

我有一个我编写的 MVVM Xamarin Forms 框架,当我弹出一个模态对话框时,我正在尝试确定如何覆盖 Soft Navigate Back 按钮的 BackButtonText(在 iOS 中用于此问题)。

我的导航服务创建了一个自定义模式页面 Controller View 模型,该模型又通过 IoC 容器变成了 NavigationPage,如下所示:

public async Task PushModalAsync<T>() where T : INavigationPageModel
    {
        var navigationmodel = _viewModelFactory.CreateModel<ModalPageControllerViewModel<T>>();
        var page = _viewFactory.CreatePage(navigationmodel);
        await Navigation.PushModalAsync(page);
    }

结果页面以类结构结束:
public class NavigationControllerView : NavigationPage, IView

然后让我设置我自己的 ViewModel 的 BindingContext。之后,我希望绑定(bind)为我完成剩下的繁重工作。在此导航 Controller View 上设置绑定(bind)上下文 将我的第一个页面(在本例中为模式对话框的唯一页面)推送到导航堆栈上。
var page = _viewFactory.CreatePage(_viewModel.CurrentPage);
PushAsync(page);

然后该页面作为弹出页面正确显示在我的设备上,其中显示了我的导航栏,并且显示了我所期望的工具栏项目。所有绑定(bind)似乎都像我想象的那样工作,我可以从我的 ViewModel 中关闭该页面。到目前为止一切都很好。

现在(我在这里猜测)因为模态对话框是模态堆栈上的唯一页面,并且可能因为它是模态的,所以此模态页面不会出现“返回”按钮。我想要做的是在模式弹出窗口上显示“后退”按钮并覆盖其文本,使其显示“取消”。这应该与 iOS 中的“创建新邮件”弹出页面想法相同,因此我可以将其关闭。

我已经阅读了很多文章,表明它应该像放置代码一样“简单”
NavigationPage.SetBackButtonText(page, "Some title") 

甚至可能包括这条线
NavigationPage.SetHasBackButton(page, this)

但忽略告诉我这需要在哪里发生。有人建议这应该发生在页面的构造函数中,但是什么页面呢?是 NavigationPage 本身的页面(据我了解,它是托管模式页面的包装器)。

注意:我在 NavigationPage 中托管了 Modal 页面,以便继续显示导航栏和工具栏项目。

我已经尝试将 NavigationPage.SetBackButtonText 和 NavigationPage.SetHasBackButton 放在所有地方,但它们似乎都没有做任何事情。

阅读另一篇文章表明这​​些方法仅影响“下一页”,因此我尝试在上一页显示之前将相同的方法应用于上一页,但仍然没有成功。但实际上我们没有前一页作为它的模态弹出窗口和堆栈上的唯一内容。

有什么想法我可能会在这里出错吗?

最佳答案

因此,这里的问题似乎是您试图在模态导航页面中显示后退按钮,但该导航页面的堆栈中没有任何内容可以返回。

您可以尝试在模式导航页面的堆栈中放置一个“虚拟”页面,然后再显示任何其他页面,然后您会看到一个后退按钮,并且可能会更改文本以显示“取消”。这种方法需要一些额外的布线来处理后退导航,并且当您“取消”回到虚拟页面时,可能会从模式堆栈中弹出模式导航。

免责声明:我没有尝试过这种方法,也不知道会出现什么其他问题。

关于c# - 在 Xamarin Forms 中显示模态对话框时,如何显示和设置 'BackButtonText' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41119309/

相关文章:

c# - 在 C# 中使用 Graph API 读取 b2c 扩展属性

c# - WPF:如何使用 MVVM 将命令绑定(bind)到 ListBoxItem?

silverlight - ListBox SelectedItem 绑定(bind) : page navigation, 获取项目,在新 View 中显示其属性并重置 SelectedIndex。我能怎么做?

c# - 如何将图表从 teechart 库添加到现有布局

ios - 缺少 Windows 选项的远程 iOS 模拟器?

c# - 如何调用带有空参数的委托(delegate)?

c# - 为什么 Count 不是无符号整数?

c# - TextBlock 中接受转义字符的等效 HTML 代码

ios - 如何在 MVVM-C RxSwift 中实现 firebase 身份验证

xaml - 在 Xamarin 中添加自定义字体