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