You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Xamarin Forms会自行更改PNG图标的显示颜色

问题产生原因
  • Xamarin Forms 针对按钮、工具栏/菜单类内置控件的图标,默认启用了自动色调适配逻辑,会优先套用系统主题色、控件对应TextColor属性、全局样式中定义的图标色调,直接覆盖PNG本身的原始颜色
  • 平台原生逻辑也会触发该问题:安卓端默认对材质设计风格的按钮、菜单图标应用预设色调;iOS端默认对导航栏、工具栏的图标自动应用全局tintColor属性值,修改原始图标颜色
解决方案

全局禁用图标自动着色

适合所有按钮、菜单都需要保留PNG原始颜色的场景:

  • 安卓端:在MainActivity.cs的OnCreate方法中添加如下代码:
// 禁用按钮图标全局自动着色
AppCompatDrawableManager.Delegate = null;
// 禁用工具栏菜单图标全局自动着色
if (Toolbar != null)
{
    Toolbar.OverflowIcon?.SetTintList(null);
}
  • iOS端:在AppDelegate.cs的FinishedLaunching方法中添加如下代码:
// 禁用导航栏图标全局自动着色
UINavigationBar.Appearance.TintColor = null;
// 禁用按钮图标全局自动着色
UIButton.Appearance.TintColor = null;

单个控件禁用自动着色

如果不需要全局修改,仅针对部分使用白色PNG图标的控件调整,可按控件类型分别处理:

按钮控件

XAML中通过平台特定属性直接禁用着色:

<Button ImageSource="your_white_icon.png">
    <Button.Android>
        <AndroidSpecific.Button TintColor="{x:Null}" />
    </Button.Android>
    <Button.iOS>
        <IOSSpecific.Button TintColor="{x:Null}" />
    </Button.iOS>
</Button>

菜单/工具栏图标

  • 安卓端:在平台层菜单资源的对应item节点添加属性android:iconTint="@null"
  • iOS端:为ToolbarItem自定义渲染器,在OnElementChanged方法中添加如下代码:
if (Control?.Image != null)
{
    Control.Image = Control.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
}

内容的提问来源于stack exchange,提问作者SmtHm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:09