如何使用DynamicResource修改NavigationPage返回按钮的颜色
问题原因
{DynamicResource xxx}是XAML专属的标记扩展语法,不能直接作为字符串传入C#方法中调用。你之前的写法会让Color.FromHex尝试解析"{DynamicResource defaultBackgroundColor}"这个普通字符串为十六进制颜色值,显然无法解析,因此不生效。
解决方法
方法1:直接读取当前资源值赋值(静态更新,资源变化后需重新调用)
如果你的defaultBackgroundColor资源中存储的是十六进制颜色字符串,直接取出后转Color即可:
var colorHex = App.Current.Resources["defaultBackgroundColor"].ToString(); NavigationPage.SetIconColor(this, Color.FromHex(colorHex));
如果资源中存储的已经是Color类型对象,直接转换类型使用即可:
var color = (Color)App.Current.Resources["defaultBackgroundColor"]; NavigationPage.SetIconColor(this, color);
方法2:绑定动态资源(动态更新,资源变化自动同步颜色)
如果需要实现和XAML中DynamicResource完全一致的动态生效效果,直接调用可绑定属性的动态资源绑定方法即可,不需要手动读取资源赋值:
this.SetDynamicResource(NavigationPage.IconColorProperty, "defaultBackgroundColor");
使用该写法后,后续只要defaultBackgroundColor的资源值发生变更,返回按钮的颜色会自动同步更新,无需额外手动调用赋值代码。
内容的提问来源于stack exchange,提问作者Bas H
相关产品推荐
相关产品推荐

