Xamarin 表单中是不是有相当于 iOS 的动态系统颜色?

Posted

技术标签:

【中文标题】Xamarin 表单中是不是有相当于 iOS 的动态系统颜色?【英文标题】:Is there an equivalent of iOS's Dynamic System Colors in Xamarin forms?Xamarin 表单中是否有相当于 iOS 的动态系统颜色? 【发布时间】:2021-01-20 10:35:51 【问题描述】:

在开发 Xamarin.ios 应用程序时,我能够为 backgroundColors 指定动态系统颜色以自动调整明暗模式。

例如:

if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))

    goalsCard.BackgroundColor = UIColor.SystemBackgroundColor;

else

    goalsCard.BackgroundColor = UIColor.White;

现在,当使用 .xaml 文件并且不使用主题时,我希望能够做同样的事情,例如标签。

我看到我可以用属性说:

TextColor = AppThemeBinding Dark=Black, Light=White

但我想让目标平台为我选择合适的颜色,而不是强制它们。

实际上,这个简单的 Label(没有明确指定颜色)在 iOS 上的深色模式下会消失:

<Label Text="this:Localize SavePassword"
                 Font="Large"
                 HorizontalOptions="StartAndExpand"
                 VerticalOptions="Center"
                 Grid.Row="0"
                 Grid.Column="0"/>

Xamarin Forms 甚至可以做到这一点吗?

【问题讨论】:

【参考方案1】:

Microsoft 文档在此处提供了与您的需求相似的内容:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/theming/system-theme-changes

<ContentPage ...>
<StackLayout Margin="20">
    <Label Text="This text is green in light mode, and red in dark mode."
           TextColor="AppThemeBinding Light=Green, Dark=Red" />
    <Image Source="AppThemeBinding Light=lightlogo.png, Dark=darklogo.png" />
</StackLayout>

然后

<ContentPage ...>
<ContentPage.Resources>

    <!-- Light colors -->
    <Color x:Key="LightPrimaryColor">WhiteSmoke</Color>
    <Color x:Key="LightSecondaryColor">Black</Color>

    <!-- Dark colors -->
    <Color x:Key="DarkPrimaryColor">Teal</Color>
    <Color x:Key="DarkSecondaryColor">White</Color>

    <Style x:Key="ButtonStyle"
           TargetType="Button">
        <Setter Property="BackgroundColor"
                Value="AppThemeBinding Light=StaticResource LightPrimaryColor, Dark=StaticResource DarkPrimaryColor" />
        <Setter Property="TextColor"
                Value="AppThemeBinding Light=StaticResource LightSecondaryColor, Dark=StaticResource DarkSecondaryColor" />
    </Style>

</ContentPage.Resources>

<Grid BackgroundColor="AppThemeBinding Light=StaticResource LightPrimaryColor, Dark=StaticResource DarkPrimaryColor">
  <Button Text="MORE INFO"
          Style="StaticResource ButtonStyle" />
</Grid>    

【讨论】:

这个恐怕不会用到平台动态颜色 所以你想让平台决定应该是什么颜色? 对于iOS basic colors,是的。不要试图复制动态系统颜色。根据各种环境变量,动态系统颜色可能会随着版本的不同而波动。不要尝试创建与系统颜色匹配的自定义颜色,而是使用动态系统颜色。

以上是关于Xamarin 表单中是不是有相当于 iOS 的动态系统颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单 - 如何在 TabbedView (iOS) 上自定义 VoiceOver

Xamarin表单:ios平台上的webview中视频未完全填充

如何在xamarin表单ios中隐藏标签栏导航标题

更改 iOS Xamarin 表单上的导航栏高度?

Xamarin 表单:如何从 ios 捆绑签名中清除旧的分发证书和配置文件?

适用于 iOS 的 Xamarin 表单:启动画面显示蓝色边框