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