Xamarin.Forms:处理导航工具栏按钮(Shell)

Posted

技术标签:

【中文标题】Xamarin.Forms:处理导航工具栏按钮(Shell)【英文标题】:Xamarin.Forms: Handle Navigation toolbar button (Shell) 【发布时间】:2021-11-26 11:03:21 【问题描述】:

我想在我的 Xamarin.Forms 应用程序(android 版)中处理任何后退点击。

对于 Android/硬件按钮非常简单,我所要做的就是重写 OnBackButtonPressed 方法。但是这个顶部工具栏并不那么容易。我听说它应该与 Shell.SetBackButtonBehavior 一起使用,但由于某种原因,它对我不起作用。

我的代码是这样的,在InitializeComponents()之后放在页面构造函数中。

Shell.SetBackButtonBehavior(this, new BackButtonBehavior 
            Command = new Command(async () =>
                await Shell.Current.DisplayAlert("Back","Back","Back")
            )
        );

知道可能出了什么问题吗?

【问题讨论】:

【参考方案1】:

该功能可以通过在xaml中定义Shell.BackButtonBehavior并在cs中实现Command来实现。

这是我的一个小例子:

在xml中:

<Shell.BackButtonBehavior>
    <BackButtonBehavior Command="Binding GoBack" >
    </BackButtonBehavior>
</Shell.BackButtonBehavior>
<ContentPage.Content>
    <StackLayout>
        <Label Text="Welcome to Xamarin.Forms!"
            VerticalOptions="CenterAndExpand" 
            HorizontalOptions="CenterAndExpand" />
    </StackLayout>
</ContentPage.Content>

在cs中:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Page2 : ContentPage

    public ICommand GoBack  get; set; 
    public Page2()
    
        InitializeComponent();
        GoBack = new Command(async () =>
            await Shell.Current.DisplayAlert("Back", "Back", "Back"));
        BindingContext = this;
    
    

【讨论】:

我确实复制了您的代码,但它不起作用。我像你一样尝试过(Xaml + xaml.cs)以及 viewModel(Xaml + VM)。但我就是不能让它工作.. 确保该页面不在shell中。 呃,“在外壳内”是什么意思? 当前页面不在Shell的“ShellContent”中。

以上是关于Xamarin.Forms:处理导航工具栏按钮(Shell)的主要内容,如果未能解决你的问题,请参考以下文章

更改 Xamarin Forms Android 导航页面颜色(按钮和返回)

我们可以覆盖 Xamarin.forms 中的 NAVIGATION BACK BUTTON 按下吗?

在 Xamarin Forms iOS 13+ 应用程序中设置导航栏按钮上的字体

在 Xamarin.Forms 中使用 ToptabbedPage 时出现意外的白色按钮

将按钮添加到标题栏 Xamarin Forms

(Xamarin Forms)从“主页”导航到任何页面时如何显示工具栏?