单击选项卡按钮时显示警报

问题描述 投票:2回答:1

我有一个带有五个标签的标签页。我的问题是当单击选项卡按钮但是当您使用滑动导航功能时,OnAppearing功能不起作用。

例如,我有一个名为settings的选项卡,它链接到我的settings.xaml我在settings.xaml.cs中的OnAppearing函数上添加了一个DisplayAlert。单击选项卡按钮进行设置时,将不会显示显示警报,但是当您使用滑动导航到设置页面时,将显示警报。我希望能够在页面出现或导航时显示警报我该怎么做?

标签页:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:local="clr-namespace:TBSApp.View"
        x:Class="TBSApp.Tabbed_Page.TabPage"
        NavigationPage.HasNavigationBar="False"
        xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
        android:TabbedPage.ToolbarPlacement="Bottom"
        BarBackgroundColor="#fff"
        android:TabbedPage.BarItemColor="#bbbbbb"
        android:TabbedPage.BarSelectedItemColor="#fc5661">
<!--Pages can be added as references or inline-->
<NavigationPage Title="Dashboard" Icon="home.png">
    <x:Arguments>
        <local:Dashboard />
    </x:Arguments>
</NavigationPage>
<NavigationPage Title="CAF" Icon="caf.png">
    <x:Arguments>
        <local:CAFMenuPage />
    </x:Arguments>
</NavigationPage>
<NavigationPage Title="Customer" Icon="retailer.png">
    <x:Arguments>
        <local:RetailerMenuPage />
    </x:Arguments>
</NavigationPage>
<NavigationPage Title="Settings" Icon="settings.png">
    <x:Arguments>
        <local:SettingsMenuPage />
    </x:Arguments>
</NavigationPage>
<NavigationPage Title="Account" Icon="account.png">
    <x:Arguments>
        <local:AccountMenuPage />
    </x:Arguments>
</NavigationPage>

Settings.xaml.cs

 protected override void OnAppearing()
 {
     base.OnAppearing();
     DisplayAlert("Settings Page", "You are in settings page", "Got it");
 }
xamarin xamarin.forms xamarin.android
1个回答
0
投票

我测试了它。你是对的。通过在标签页之间滑动它总是有效,但是当我点击标签按钮时,它有时会按预期工作,有时它不起作用。可能这是xamarin.forms中的一个错误。

有一种解决方法在两种情况下都能正常工作。您可以在TabbedPage中使用CurrentPageChanged事件,如下所示:

private void TabbedPage_CurrentPageChanged(object sender, EventArgs e)
{
   var navigationPage = CurrentPage as NavigationPage;

   var currentPage = navigationPage.CurrentPage;

   if(currentPage.GetType() == typeof(AboutPage))
   {
        DisplayAlert("CurrentPageChanged works correctly", "about page", "ok");
   }
   else if(currentPage.GetType() == typeof(ItemsPage))
   {
        DisplayAlert("CurrentPageChanged works correctly", "items page", "ok");
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.