我更新了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>
感觉就像一个错误(无论是旧的还是新的)因为它改变了它的工作方式而没有改变任何代码。
答案 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当前选择的主题。