【问题标题】:How to set/change XML values at runtime?如何在运行时设置/更改 XML 值?
【发布时间】:2020-07-04 17:53:29
【问题描述】:

在我的应用程序中,我想实现多个主题(浅色和深色),为此,我创建了 2 个具有完全相同键名的 ResourceDictionary XAML 文件,并将它们合并到 App.xaml 中,具体取决于持续需要的主题。

问题在于 XML 中存在的 Android/IOS 特定属性(例如在 Android 中),它们不遵守 App.xaml 文件。所以我最终将我的应用程序设置为深色主题,例如使用 <TimePicker/> 元素,例如使用默认浅色主题的颜色。

所以我希望能够在 IOS 中更改 Android XML 颜色文件 colors.xmlstyles.xml 参数及其等效项根据我的需要,例如更改颜色重音等等。

提前致谢^^。

=============== 更新 1 ===============

也许我可以让 XML 文件从动态资源、应用程序属性或代码中获取其值?我可以让更改主题事件设置资源或应用程序属性,甚至可以编写代码来动态决定要放置哪些值。

有什么帮助吗?

=============== 更新 2 ===============

也许我们可以用另一种方式覆盖 colors.xmlstyles.xml 文件?或者可能创建 2 个 color.xmlstyles.xml 文件并根据代码加载它们?!

【问题讨论】:

  • 我认为你在正确的轨道上。只需在代码级别动态切换 xml 文件。添加一些您在此之前完成的代码。那么我们可以为您提供帮助。
  • 嗯,你能帮我解决这个问题吗?如何动态切换xml文件?
  • 您可以参考以下链接:stackoverflow.com/questions/48465053/…
  • 它没有告诉我该怎么做,而是他们在谈论 XAML 而不是 XML,有一条评论谈论 XML,但没有告诉我如何切换 XML 样式......
  • 链接建议在style.xml中设置样式。您可以尝试在运行时重置样式。

标签: xml xamarin xamarin.forms


【解决方案1】:

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

  1. 从应用程序中删除当前主题。这是通过清除应用程序级 ResourceDictionary 的 MergedDictionaries 属性来实现的。

  2. 加载选定的主题。这是通过将所选主题的实例添加到应用程序级 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 styles.xml 文件以使应用程序中的启动画面、雕像栏和其他口音跟随新的颜色主题。
猜你喜欢
  • 2019-02-26
  • 2016-02-11
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多