Xamarin主题变暗和

时间:2017-04-18 21:06:43

标签: xamarin xamarin.forms themes resourcedictionary

我更新了XAMARIN.FORMS和XAMARIN.FORMS.PAGES V2.3.5.233-pre1,我的动态主题更改退出当前屏幕。以前它会在我更改它和任何打开的屏幕时更改屏幕。现在似乎要求我关闭任何打开的屏幕并重新打开它。我不确定如何刷新屏幕,因为这不是一个理想的选择。

以下是我如何更改主题。任何意见将是有益的。如果我回到以前的版本,它工作正常,但后来我失去了我需要的新功能。

我只是使用给出的黑暗和光明主题 我有一个简单的选择器来选择它们。

<StackLayout Orientation="Horizontal" >
<Label Text="Theme"  HorizontalOptions="Start" VerticalOptions="Center" />
<Picker SelectedIndex="{Binding Theme,Mode=TwoWay}" HorizontalOptions="EndAndExpand" VerticalOptions="Center">
    <Picker.Items>
        <x:String>Light</x:String>
        <x:String>Dark</x:String>
    </Picker.Items>
</Picker>
</StackLayout>

我通过绑定选择器将其更改为以下主题:

  public int Theme
    {
        get { return _theme; }
        set
        {
            _theme = value;
            App.SetTheme = (MySettings.Theme)value;
        }
    }
在App中

:             public static MySettings.Theme SetTheme {             组             {                 if(value == MySettings.Theme.Light)                 {                     App.Current.Resources = new ResourceDictionaryLight();                 }                 else if(value == MySettings.Theme.Dark)                 {                     App.Current.Resources = new ResourceDictionaryDark();                 }             }         }

ResourceDictionaryLight xaml像这样:

<?xml version="1.0" encoding="utf-8"?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="ChurchApp.ResourceDictionaryLight" 
             MergedWith="light:LightThemeResources"
             xmlns:light="clr-namespace:Xamarin.Forms.Themes;assembly=Xamarin.Forms.Theme.Light">
</ResourceDictionary>

感觉就像一个错误(无论是旧的还是新的)因为它改变了它的工作方式而没有改变任何代码。

1 个答案:

答案 0 :(得分:0)

从Xamarin.Forms 4.7开始,引入了AppThemeBinding,这使主题管理非常容易,因为它内置在框架中。

这是一个在OW主题和Dark主题中定义属性的示例:

<Label Text="Hellow World" TextColor="{AppThemeBinding Dark=White, Light=Black}"/>

这不是主要目标,但请注意,您不仅可以定义颜色,还可以定义将为浅色和深色主题设置的任何属性的值。 这可能不是一个实际的例子,而只是演示:

<Label Text="Hellow World" FontSize={AppThemeBinding Dark=12, Light=15} TextColor="{AppThemeBinding Dark=White, Light=Black}"/>

更重要的是,您可以通过设置属性App.Current.UserAppTheme(在应用程序中的任何位置,而无需重新启动或关闭任何页面)来选择和更改主题 要么:

  • 黑暗:OSAppTheme.Dark
  • 浅色:OSAppTheme.Light
  • 未指定:OSAppTheme.Unspecified。如果Android版本支持深色主题(Android 10 (API level 29) and higher),则在设置了该属性后,您的应用将遵循Android当前选择的主题。

有用的文档

  1. Microsoft Blog: App Themes for Xamarin.Forms
  2. https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/theming/system-theme-changes
  3. https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/markup-extensions/consuming#appthemebinding-markup-extension