我有一个Xamarin Forms应用程序,为用户提供了3个主题选项。我希望能够通过单击按钮来更改Tabbar背景,选定项目和未选定项目的颜色。在iOS中,我可以使用以下渲染器来做到这一点:
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if(e.OldElement != null)
{
Xamarin.Forms.Application.Current.PropertyChange -= Current_PropertyChanged;
return;
}
Xamarin.Forms.Application.Current.PropertyChange += Current_PropertyChanged; //subscribe to the App class' built in property changed event
UpdateTheme();
}
void Current_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
UpdateTheme();
}
在Android中,我知道可以在styles.xml
中更改这些颜色,但这只能让我设置一次颜色。另外,我正在使用ToolbarPlacement="Bottom"
将标签栏放置在屏幕底部。
android:TabbedPage.ToolbarPlacement="Bottom"
android:TabbedPage.BarSelectedItemColor="Red"
android:TabbedPage.IsSwipePagingEnabled="False"
我想知道是否可以通过单击按钮来动态更改BarSelectedItemColor
。
答案 0 :(得分:7)
我终于通过使用DynamicResource
样式使此工作得以实现:
从此:
android:TabbedPage.BarSelectedItemColor="Red"
对此:
android:TabbedPage.BarSelectedItemColor="{DynamicResource BarSelectedItemColor"
答案 1 :(得分:0)
您可以选中此link。
这是关于动态Resource
和Them
或类似内容的讨论。
<Application>
xmlns="zamarin schema{forms}"
xmlns:x="microsoft schema{xaml}"
x:Class="name">
<Application.Resources>
<ResourceDictionary>
<Color x:Key="backgroundColor">your color</Color>
<Color x:Key="textColor">name of color</Color>
</ResourceDictionary>
</Application.Resources>
</Application>
静态资源
StaticResource
标记扩展允许我们引用预定义的资源,但是有一个关键的局限性:字典中的资源在控制实例化期间仅被提取了一次,并且不能在runtime
进行更改。语法与绑定非常相似。只需将属性的值设置为“ {StaticResource Resource_Name}”即可。让我们更新ViewCell
以使用我们定义的资源:
<Label Text="{Binding Name}" FontSize="Medium" FontAttributes = "Bold" TextColor = "{DynamicResource textColor}" LineBreakMode="NoWrap"/>
<Label Text="{Binding Text}" FontSize="Small" LineBreakMode="WordWrap" TextColor = "{DynamicResource textColor}"/>
现在!在此代码中,您可以更改资源:
App.Current.Resources ["backgroundColor"] = Color.White;
App.Current.Resources ["textColor"] = Color.Black;