使用 AppThemeBinding 不指定各处的暗值和亮值?

ove*_*ter 5 xamarin xamarin.forms

我很好奇是否有更方便的方法在 Xamarin 表单中使用主题。已知的方法是将颜色添加到 App.xaml 中的 ResourceDictionary 中:

<Color x:Key="BackgroundColorDark">#111111</Color>
<Color x:Key="BackgroundColorLight">#ffffff</Color>
Run Code Online (Sandbox Code Playgroud)

然后在元素上指定它,如下所示:

 <Button BackgroundColor="{AppThemeBinding Light={StaticResource DarkPageBackgroundColor}, 
Dark={StaticResource LightPageBackgroundColor}}" ... >
Run Code Online (Sandbox Code Playgroud)

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

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

<ResourceDictionary x:Name="White">
    <Color x:Key="ButtonBackgroundColor">#ffffff</Color>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

Bas*_*s H 4

您可以为不同的按钮使用 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>
Run Code Online (Sandbox Code Playgroud)

并在 Xaml 中为按钮添加样式

 <Button Text="MORE INFO"
          Style="{StaticResource ButtonStyle}" />
Run Code Online (Sandbox Code Playgroud)

此处的信息https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/theming/system-theme-changes

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