我有一个带有五个标签的标签页。我的问题是当单击选项卡按钮但是当您使用滑动导航功能时,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.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");
}
}