我正在研究Xamarin.Forms项目,并且我试图根据选项卡处于活动状态还是非活动状态来更改TabbedPage选项卡的图标。我已使用以下代码将其在iOS上运行,但是由于某些未知原因,它在Android上不起作用。
MainPage.xaml
<TabbedPage xmlns:Views="clr-namespace:Project.Views" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Project.Views.MainPage">
<NavigationPage x:Name="HomeTab" Title="Home" Icon="home_inactive.png">
<x:Arguments>
<Views:Home/>
</x:Arguments>
</NavigationPage>
<NavigationPage x:Name="FavoritesTab" Title="Favorites" Icon="favorites_inactive.png">
<x:Arguments>
<Views:Favorites/>
</x:Arguments>
</NavigationPage>
<NavigationPage x:Name="AlertsTab" Title="Alerts" Icon="alerts_inactive.png">
<x:Arguments>
<Views:Alerts/>
</x:Arguments>
</NavigationPage>
<NavigationPage x:Name="AccountTab" Title="Account" Icon="account_inactive.png">
<x:Arguments>
<Views:Account/>
</x:Arguments>
</NavigationPage>
<NavigationPage x:Name="TestViewTab" Title="TestView">
<x:Arguments>
<Views:TestView/>
</x:Arguments>
</NavigationPage>
</TabbedPage>
MainPage.xaml.cs
public partial class MainPage : TabbedPage
{
public MainPage()
{
InitializeComponent();
this.CurrentPageChanged += (object sender, EventArgs e) => {
var i = this.Children.IndexOf(this.CurrentPage);
HomeTab.Icon = "home_inactive.png";
FavoritesTab.Icon = "favorites_inactive.png";
AlertsTab.Icon = "alerts_inactive.png";
AccountTab.Icon = "account_inactive.png";
switch (i)
{
case 0:
HomeTab.Icon = "home_active.png";
break;
case 1:
FavoritesTab.Icon = "favorites_active.png";
break;
case 2:
AlertsTab.Icon = "alerts_active.png";
break;
case 3:
AccountTab.Icon = "account_active.png";
break;
}
};
}
}
使用CurrentPageChanged
事件在iOS上非常有效,但由于某些原因,它在Android上不起作用。如果我更改了Title
之类的内容而不是Icon
,则它可以在iOS和Android上使用。
我将如何解决此问题,使其在Android和iOS上均可使用?我可以在共享代码中全部完成吗?如果没有,有人可以指导我完成特定于平台的代码来完成这项工作吗?