C# Xamarin形成平台特定的SetBarSelectedItemColor没有效果

C# Xamarin形成平台特定的SetBarSelectedItemColor没有效果,c#,android,xamarin,xamarin.forms,C#,Android,Xamarin,Xamarin.forms,我想动态更改活动选项卡指示器的颜色。多个来源(,)表明有一种方法可以做到这一点,但它必须作为android的特定平台来完成 On().SetBarSelectedItemColor(颜色) 然而,我在VisualStudio中从android股票模板测试这个,它没有效果。不管我是在TabbedPage构造函数中运行它,还是以后作为事件运行它 版本信息: Xamarin表单:3.5.0.129452 Visual Studio:15.9.7 Android SDK:9.1.7.0 平台规范是否仅在

我想动态更改活动选项卡指示器的颜色。多个来源(,)表明有一种方法可以做到这一点,但它必须作为android的特定平台来完成

On().SetBarSelectedItemColor(颜色)

然而,我在VisualStudio中从android股票模板测试这个,它没有效果。不管我是在TabbedPage构造函数中运行它,还是以后作为事件运行它

版本信息:

Xamarin表单:3.5.0.129452
Visual Studio:15.9.7
Android SDK:9.1.7.0

平台规范是否仅在特定条件下有效

代码:
除了一些颜色绑定实验,它是股票代码

MainPage.xaml.cs(注意:App.OnChange确实被触发,代码按预期执行)

使用系统;
使用Xamarin.Forms;
使用Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
使用Xamarin.Forms.Xaml;
名称空间App1.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类主页面:Xamarin.Forms.TabbedPage
{     
公共主页()
{
初始化组件();
应用程序更改((属性,值)=>
{
if(prop==App.ActiveColorKey)
{
On().SetBarSelectedItemColor(Color.FromHex(value));
On().SetBarItemColor(Color.FromHex(value));
}
});
} 
}
}
MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:views="clr-namespace:App1.Views"
            x:Class="App1.Views.MainPage" BarBackgroundColor="{DynamicResource TabColor}">

    <TabbedPage.BarTextColor>
        <OnPlatform x:TypeArguments="Color">
            <On Platform="Android" Value="Green" />
        </OnPlatform>
    </TabbedPage.BarTextColor>
    <TabbedPage.Children>
        <NavigationPage Title="Browse">
            <NavigationPage.Icon>
                <OnPlatform x:TypeArguments="FileImageSource">
                    <On Platform="iOS" Value="tab_feed.png"/>
                </OnPlatform>
            </NavigationPage.Icon>
            <x:Arguments>
                <views:ItemsPage />
            </x:Arguments>
        </NavigationPage>

        <NavigationPage Title="About dog" BarBackgroundColor="Red" BackgroundColor="Yellow">
            <NavigationPage.Icon>
                <OnPlatform x:TypeArguments="FileImageSource">
                    <On Platform="iOS" Value="tab_about.png"/>
                </OnPlatform>
            </NavigationPage.Icon>
            <x:Arguments>
                <views:AboutPage />
            </x:Arguments>
        </NavigationPage>
    </TabbedPage.Children>
</TabbedPage>

从中,您可以按如下方式设置BarSelectedItem的静态颜色:

<TabbedPage ...
            xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            android:TabbedPage.ToolbarPlacement="Bottom"
            android:TabbedPage.BarItemColor="Black"
            android:TabbedPage.BarSelectedItemColor="Red">
    ...
</TabbedPage>
 Resources["BarSelectedItemColor"] = Resources["BlueColor"];
 ...
 Resources["BarSelectedItemColor"] = Resources["YellowColor"];
为此:

android:TabbedPage.BarSelectedItemColor="{DynamicResource BarSelectedItemColor}"
完整的示例代码:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:TabbedPageDemo;assembly=TabbedPageDemo"
            x:Class="TabbedPageDemo.TabbedPageDemoPage"
            xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            android:TabbedPage.ToolbarPlacement="Bottom"
            android:TabbedPage.BarItemColor="Black"
            android:TabbedPage.BarSelectedItemColor="{DynamicResource BarSelectedItemColor}">

  <TabbedPage.Resources>
    <ResourceDictionary>
            <Color x:Key="BlueColor">Blue</Color>
            <Color x:Key="YellowColor">Yellow</Color>
        </ResourceDictionary>
  </TabbedPage.Resources>
  ...
</TabbedPage>
如果不需要使用此渲染器,则应注释其引用。我的表格答案代码可以用

//[assembly: ExportRenderer(typeof(TabbedPage), typeof(TabRenderer))]

并应在Xaml中删除此属性:

<TabbedPage.BarTextColor>
        <OnPlatform x:TypeArguments="Color">
            <On Platform="Android" Value="Green" />
        </OnPlatform>
</TabbedPage.BarTextColor>

从中,您可以按如下方式设置BarSelectedItem的静态颜色:

<TabbedPage ...
            xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            android:TabbedPage.ToolbarPlacement="Bottom"
            android:TabbedPage.BarItemColor="Black"
            android:TabbedPage.BarSelectedItemColor="Red">
    ...
</TabbedPage>
 Resources["BarSelectedItemColor"] = Resources["BlueColor"];
 ...
 Resources["BarSelectedItemColor"] = Resources["YellowColor"];
为此:

android:TabbedPage.BarSelectedItemColor="{DynamicResource BarSelectedItemColor}"
完整的示例代码:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:TabbedPageDemo;assembly=TabbedPageDemo"
            x:Class="TabbedPageDemo.TabbedPageDemoPage"
            xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            android:TabbedPage.ToolbarPlacement="Bottom"
            android:TabbedPage.BarItemColor="Black"
            android:TabbedPage.BarSelectedItemColor="{DynamicResource BarSelectedItemColor}">

  <TabbedPage.Resources>
    <ResourceDictionary>
            <Color x:Key="BlueColor">Blue</Color>
            <Color x:Key="YellowColor">Yellow</Color>
        </ResourceDictionary>
  </TabbedPage.Resources>
  ...
</TabbedPage>
如果不需要使用此渲染器,则应注释其引用。我的表格答案代码可以用

//[assembly: ExportRenderer(typeof(TabbedPage), typeof(TabRenderer))]

并应在Xaml中删除此属性:

<TabbedPage.BarTextColor>
        <OnPlatform x:TypeArguments="Color">
            <On Platform="Android" Value="Green" />
        </OnPlatform>
</TabbedPage.BarTextColor>


是的,这种方法对Xamarin.Android很有效。你们可以展示一些关于这个问题的代码。这里有一个类似的讨论供参考。()我添加了一些代码。我已经玩了很长时间了。我已经尝试了一个自定义的渲染器(尽管代码中没有针对给定问题的渲染器)。据推测,我应该能够直接访问底层的TabLayout来设置颜色,但是tabbedderrender不像其他渲染器那样公开控件。我似乎也无法在视图层次结构中找到它,因为建议您可以使用DynamicSource动态地
设置SelectedItemColor
。我将发布答案。需要注意DynamicSource的使用,我已经更新了答案。是的,这个方法刚刚对Xamarin.Android有效。你们可以展示一些关于这个问题的代码。这里有一个类似的讨论供参考。()我添加了一些代码。我已经玩了很长时间了。我已经尝试了一个自定义的渲染器(尽管代码中没有针对给定问题的渲染器)。据推测,我应该能够直接访问底层的TabLayout来设置颜色,但是tabbedderrender不像其他渲染器那样公开控件。我似乎也无法在视图层次结构中找到它,因为建议您可以使用DynamicSource动态地
设置SelectedItemColor
。我将发布答案。需要注意DynamicSource的使用,我已经更新了答案,运气不好。即使我只是将其设置为静态资源,选定的选项卡指示器也不受影响。它保持默认的白色。也不会引发错误。我的解决方案有一个Tabbar.axml。我可以通过更改该文件静态设置活动颜色。但是,无论是否设置了app:tabIndicatorColor,颜色都不受xamlIf StaiceSource中绑定的影响,然后DynamicSource可以工作。您可以显示一些有关StaiceSource的代码。我发现问题在哪里。在您的App1.Android解决方案下有一个Renderers文件夹
TabRenderer.cs
没有有效的代码,但它已绑定到
TabbedPage
类。这会影响表单中的代码显示。您需要对其引用进行注释。我的表单答案的代码可以工作。
/[assembly:ExportRenderer(typeof(TabbedPage),typeof(TabRenderer))
OK,因为
TabPage Xaml
具有
TabbedPage.BarTextColor
,您将其设置为绿色。只需删除此属性。
DynamicResource
即可。我已更新了答案。如果您解决了问题,请记住标记。谢谢。^。^运气不好。即使我只是将其设置为静态资源,选定的选项卡指示器也不受影响。它保持默认的白色。也不会引发错误。我的解决方案有一个Tabbar.axml。我可以通过更改该文件静态设置活动颜色。但是,无论是否设置了app:tabIndicatorColor,颜色都不受xamlIf StaiceSource中绑定的影响,然后DynamicSource可以工作。您可以显示一些有关StaiceSource的代码。我发现问题在哪里。在您的App1.Android解决方案下有一个Renderers文件夹
TabRenderer.cs
没有有效的代码,但它已绑定到
TabbedPage
类。这会影响表单中的代码显示。您需要对其引用进行注释。我的表单答案的代码可以工作。
/[assembly:ExportRenderer(typeof(TabbedPage),typeof(TabRenderer))
ok,因为