在我的应用程序中,我想实现多个主题(浅色和深色),这个,我创建了 2 ResourceDictionary
具有完全相同的键名的 XAML 文件,我将它们合并到 App.xaml 取决于正在进行的所需主题。
问题在于 XML 中存在的 Android/IOS 特定属性(例如在 Android 中),它们不遵守 App.xaml 文件。所以我最终在黑暗主题中使用我的应用程序,例如 <TimePicker/>
元素例如具有默认灯光主题的颜色。
所以我希望能够改变Android XML 颜色文件 颜色.xml 和 样式.xml 根据我的需要,在 IOS 中设置等效的参数,例如更改颜色口音等等。
提前谢谢^^。
============== 更新 1 ================
也许如果我可以制作 XML 文件从动态资源、应用程序属性或代码中获取其值?我可以使更改主题事件设置资源或应用程序属性,甚至可以编写动态决定要放置哪些值的代码。
有什么帮助吗?
============== 更新 2 ================
也许我们可以覆盖 颜色.xml 和 样式.xml 文件用另一种方式?或者创建 2 color.xml 和 样式.xml 文件并根据代码加载它们?!
最佳答案
在运行时选择主题时,应用程序应该:
任何使用 DynamicResource 标记扩展设置属性的 VisualElement 对象都将应用新的主题值。发生这种情况是因为 DynamicResource 标记扩展维护一个指向字典键的链接。因此,当与键关联的值被替换时,更改将应用于 VisualElement 对象。
在示例应用程序中,通过包含 Picker 的模式页面选择主题。以下代码显示了 OnPickerSelectionChanged 方法,该方法在所选主题更改时执行:
void OnPickerSelectionChanged(object sender, EventArgs e)
{
Picker picker = sender as Picker;
Theme theme = (Theme)picker.SelectedItem;
ICollection<ResourceDictionary> mergedDictionaries = Application.Current.Resources.MergedDictionaries;
if (mergedDictionaries != null)
{
mergedDictionaries.Clear();
switch (theme)
{
case Theme.Dark:
mergedDictionaries.Add(new DarkTheme());
break;
case Theme.Light:
default:
mergedDictionaries.Add(new LightTheme());
break;
}
}
}
来源 - https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/theming/theming#load-a-theme-at-runtime这篇文章会帮助你
https://www.sharpnado.com/dark-light-mode/
更多-https://docs.microsoft.com/en-us/xamarin/android/user-interface/material-theme
关于xml - 如何在运行时设置/更改 XML 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62732575/