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

时间:2019-03-10 07:28:32

标签: xamarin xamarin.forms xamarin.android

我有一个带五个标签的标签页。我的问题是,当单击选项卡按钮时,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");
 }

1 个答案:

答案 0 :(得分:1)

我测试了它。你是对的。通过在选项卡页面之间滑动,它始终可以工作,但是当我点击选项卡按钮时,有时它会按预期运行,有时却无法正常工作。可能这是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");
   }
}