Xamarin Forms - TabbedPage 平台特定的 xaml 代码到代码隐藏

Posted

技术标签:

【中文标题】Xamarin Forms - TabbedPage 平台特定的 xaml 代码到代码隐藏【英文标题】:Xamarin Forms - TabbedPage platform specific xaml code to code-behind 【发布时间】:2021-03-08 00:48:15 【问题描述】:

我正在尝试更改标签页中图标的颜色。我能够做到这一点,只需投到android:TabbedPage.BarItemColor="Red"

但图标上的颜色必须根据当前显示的页面进行更改。

我设法在我的代码隐藏中更改了在页面上触发的这个方法:

Tabbepage.xaml.cs

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

        var currentPage = navigationPage.CurrentPage;

        if (currentPage.GetType() == typeof(MenuPage))
        
            Tabbar.BarTextColor = Color.White;
            Tabbar.BarBackgroundColor = Color.FromHex("#004f3d");
        
        else if (currentPage.GetType() == typeof(HerdList))
        
            Tabbar.BarTextColor = Color.Black;
            Tabbar.BarBackgroundColor = Color.White;
        
    

但我只能弄清楚如何将颜色设置为:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:prism="http://prismlibrary.com"
            prism:ViewModelLocator.AutowireViewModel="True"
            x:Class="ChrApp.Views.Tab.BottomTabNavigation"
            xmlns:local="clr-namespace:ChrApp.Views"
            x:Name="Tabbar"
            xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            android:TabbedPage.ToolbarPlacement="Bottom"
            android:TabbedPage.BarSelectedItemColor="Green"
            android:TabbedPage.BarItemColor="Red"
            xmlns:CustomRenderer="clr-namespace:ChrApp.CustomRenderer"
            CurrentPageChanged="TabbedPage_CurrentPageChanged"
            >
    <NavigationPage 
        Title="Forside"
                    >
        <x:Arguments>
            <local:MenuPage/>
        </x:Arguments>
        <NavigationPage.IconImageSource>
            <FontImageSource  FontFamily="StaticResource FontAwesomeSolid" Glyph="x:Static CustomRenderer:Icon.House"/>
        </NavigationPage.IconImageSource>
        
        
    </NavigationPage>
    <NavigationPage 
        Title="Besætning"
                    >
        <x:Arguments>
            <local:HerdList/>
        </x:Arguments>
        <NavigationPage.IconImageSource>
            <FontImageSource  FontFamily="StaticResource FontAwesomeSolid" Glyph="x:Static CustomRenderer:Icon.Pig"/>
        </NavigationPage.IconImageSource>
    </NavigationPage>


</TabbedPage>

我能否以某种方式将我的代码隐藏中的方法发送到我的视图模型,或者我可以从我的代码隐藏中访问演员表android:TabbedPage.BarItemColor="Red"

提前致谢! ❤

【问题讨论】:

【参考方案1】:

这就是你可以在后面的代码中做到这一点的方法

using Xamarin.Forms;
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
using Xamarin.Forms.Xaml;
using TabbedPage = Xamarin.Forms.TabbedPage;

namespace DummyTestApp.Views

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class TabbedPage1 : TabbedPage
    
        public TabbedPage1()
        
            InitializeComponent();
            On<Android>().SetToolbarPlacement(ToolbarPlacement.Bottom).SetBarItemColor(Color.Red).SetBarSelectedItemColor(Color.Green);
        
    

P.S.BarSelectedItemColor 现在已过时在 TabbedPage 中使用 SelectedTabColor

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:d="http://xamarin.com/schemas/2014/forms/design"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            mc:Ignorable="d" x:Class="DummyTestApp.Views.TabbedPage1"
            SelectedTabColor="Blue">
    <!--Pages can be added as references or inline-->
    <ContentPage Title="Tab 1" />
    <ContentPage Title="Tab 2" />
    <ContentPage Title="Tab 3" />
</TabbedPage>

【讨论】:

堆栈溢出的维护是因为这是一本百科全书,像这样的 cmets 没有帮助,也不需要。只需接受答案和/或投票,以供将来参考。

以上是关于Xamarin Forms - TabbedPage 平台特定的 xaml 代码到代码隐藏的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 手势密码实现

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源

Xamarin.Forms.Forms.Init(e) Onlaunched 中的 FileNotFoundExeception

如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?