Android 上的 VisualElement 旧版颜色模式

一些 Xamarin.Forms 视图具有旧版颜色模式。 在此模式下,当视图的 IsEnabled 属性设置为 false 时,视图将使用默认本机颜色替代用户设置的处于禁用状态的颜色。 为了向后兼容,这种旧版颜色模式仍然是受支持视图的默认行为。

此 Android 平台特定功能可禁用这种旧版颜色模式,这样即使在视图禁用时,用户对视图设置的颜色也仍然能保留。 其使用方式为,在 XAML 中将 VisualElement.IsLegacyColorModeEnabled 附加属性设置为 false

<ContentPage ...
             xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core">
    <StackLayout>
        ...
        <Button Text="Button"
                TextColor="Blue"
                BackgroundColor="Bisque"
                android:VisualElement.IsLegacyColorModeEnabled="False" />
        ...
    </StackLayout>
</ContentPage>

或者,可以使用 Fluent API 从 C# 使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...

_legacyColorModeDisabledButton.On<Android>().SetIsLegacyColorModeEnabled(false);

VisualElement.On<Android> 方法指定此平台特定仅在 Android 上运行。 Xamarin.Forms.PlatformConfiguration.AndroidSpecific 命名空间中的 VisualElement.SetIsLegacyColorModeEnabled 方法用于控制是否禁用旧版颜色模式。 此外,VisualElement.GetIsLegacyColorModeEnabled 方法还可用于返回是否禁用了旧版颜色模式。

结果是可以禁用旧版颜色模式,以便即使禁用视图,用户对视图设置的颜色也会保留:

已禁用旧版颜色模式

注意

在视图上设置 VisualStateGroup 时,将完全忽略旧版颜色模式。 若要详细了解视觉对象状态,请参阅 Xamarin.Forms 视觉对象状态管理器