xml - 如何在运行时设置/更改 XML 值?

标签 xml xamarin xamarin.forms

在我的应用程序中,我想实现多个主题(浅色和深色),这个,我创建了 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 文件并根据代码加载它们?!

最佳答案

在运行时选择主题时,应用程序应该:

  • 从应用程序中删除当前主题。这是通过清除应用程序级 ResourceDictionary 的 MergedDictionaries 属性来实现的。
  • 加载选定的主题。这是通过将所选主题的实例添加到应用程序级 ResourceDictionary 的 MergedDictionaries 属性来实现的。

  • 任何使用 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/

    相关文章:

    ios - 单点触控 : Get user current lcoation

    ListView 分隔符插入全宽

    listview - 如何将 ListView 中元素的索引绑定(bind)到第一个 ListView 内第二个 ListView 的 ItemsSource 中?

    Python ElementTree "no element found"异常

    java - 尽可能晚地初始化 Spring Bean

    javascript - 如何将 d3.xml 加载的 svg 附加到 svg 中

    facebook - Xamarin.Forms:在 iOS 上使用 SharePlugin 在 Facebook 上共享链接

    xml - fatal error : The schemaLocation attribute does not contain pairs of values

    xaml - 忽略绑定(bind)初始化

    c# - 如何在图像上写XAML控件?