相关文章推荐
高大的拐杖  ·  jQuery ...·  1 年前    · 

Xamarin.Forms某些视图具有旧版颜色模式。 在此模式下,当视图的属性设置为 false IsEnabled ,视图将覆盖用户为禁用状态的默认本机颜色设置的颜色。 为了向后兼容,此旧版颜色模式仍然是支持视图的默认行为。

此 Android 平台特定的禁用此旧版颜色模式,以便即使禁用视图,用户对视图设置的颜色也会保留。 通过将附加属性设置为 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 上运行。 命名空间 VisualElement.SetIsLegacyColorModeEnabledXamarin.Forms.PlatformConfiguration.AndroidSpecific 的方法用于控制是否禁用旧颜色模式。 此外, VisualElement.GetIsLegacyColorModeEnabled 该方法还可用于返回是否禁用旧颜色模式。

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

在视图上设置 VisualStateGroup 时,将完全忽略旧版颜色模式。 有关视觉状态的详细信息,请参阅 Xamarin.Forms Visual State Manager

  • PlatformSpecifics (示例)
  • 创建平台特定信息
  • AndroidSpecific API
  • AndroidSpecific.AppCompat API
  •