使用 AppThemeBinding 而不是在所有地方指定暗值和亮值?

Use AppThemeBinding not specifying everywhere dark and light values?

我很好奇有没有更方便的方法在 Xamarin 表单中使用主题。 已知的方法是在 App.xaml:

中将 Colors 添加到 ResourceDictionary
<Color x:Key="BackgroundColorDark">#111111</Color>
<Color x:Key="BackgroundColorLight">#ffffff</Color>

然后像这样在元素上指定它:

 <Button BackgroundColor="{AppThemeBinding Light={StaticResource DarkPageBackgroundColor}, 
Dark={StaticResource LightPageBackgroundColor}}" ... >

所以我的问题是有没有可能以不同的方式做到这一点?例如,我有很多按钮,我不想在每个按钮的任何地方都指定它必须将这种颜色用于浅色主题,而那种颜色用于深色主题。我想像这样指定它:嘿按钮,你的背景颜色是“ButtonBackgroundColor”,它的值取决于当前主题,它本身在两个不同的 ResourceDictionaries 中设置,如下所示:

<ResourceDictionary x:Name="Dark">
    <Color x:Key="ButtonBackgroundColor">#000000</Color>
</ResourceDictionary>

<ResourceDictionary x:Name="White">
    <Color x:Key="ButtonBackgroundColor">#ffffff</Color>
</ResourceDictionary>

您可以为不同的按钮使用 ButtonStyle

  <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>

并在 Xaml 中为按钮添加样式

 <Button Text="MORE INFO"
          Style="{StaticResource ButtonStyle}" />

信息在这里https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/theming/system-theme-changes

我使用 ButtonStyle 并为我想以其他方式显示的其他按钮制作了一个 ButtonStyleA

是正确的。在大多数情况下,您应该使用样式。您甚至可以隐式使用样式,这意味着它们将默认应用于目标类型的所有控件。

    <Style 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>

// The backgroundcolor and textcolor are applied by default now.
<Button Text="MORE INFO"/>

同意上面的评论,认为大多数人都想念您可以在资源字典内的样式中绑定到静态颜色。当你想改变主题颜色时非常有用,一上来就是所有风格的苹果。

我这样做但我也允许用户选择我保存在数据库列中的颜色,应用程序的加载我将在代码中设置资源字典中的值;)