我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

Posted

技术标签:

【中文标题】我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?【英文标题】:Can I programmatically change styles.xml in Xamarin.Forms? 【发布时间】:2018-07-06 00:16:18 【问题描述】:

我们有一个可以自定义颜色的应用。这使得列表视图中选定项目的橙色 android 默认值有时看起来很糟糕。我们想改变列表视图的选定项的颜色。

我知道如何在我们页面的代码隐藏 (xaml.cs) 中执行此操作,并且我知道您可以在 styles.xml 中静态更改它。但是因为列表视图的颜色可以改变,所以无论我们选择什么颜色,我们都可能会遇到类似的问题。

有没有办法从代码中访问和更改 styles.xml 值?

【问题讨论】:

参考:***.com/questions/39027693/… 【参考方案1】:

我们还可以使用 Backgroundcolor Bindable 属性创建 ViewCell 渲染器。有了这个,我们可以做的是将 Bindable 属性所需的颜色设置为 xaml 本身,这将在其渲染器中设置颜色,以便我们可以根据需要提供不同的颜色。

【讨论】:

【参考方案2】:

你可以用Xamarin Themes来做到这一点有一个关于如何做到这一点的清晰教程。

然后你可以使用以下来改变主题

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;
        
    

更新:

如果你想在 android 上更改选择,你必须在你的 android styles.xml 文件中进行,要动态更改它,你必须编写一个 effect:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <color name="DarkYellow">#FF00FF</color>
  <style name="Theme.MyHoloLight" parent="android:Theme.Holo.Light">
    <item name="android:colorPressedHighlight">@color/DarkYellow</item>
    <item name="android:colorLongPressedHighlight">@color/DarkYellow</item>
    <item name="android:colorFocusedHighlight">@color/DarkYellow</item>
    <item name="android:colorActivatedHighlight">@color/DarkYellow</item>
    <item name="android:activatedBackgroundIndicator">@color/DarkYellow</item>
  </style>
</resources>

【讨论】:

以上是关于我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms:以编程方式将子项添加到网格的某些列

如何访问 Xamarin.Forms 中以编程方式创建的 UI 元素:timepicker

如何以编程方式从Xamarin.Forms ScrollView中删除内容?

如何在 Xamarin Forms 中创建隐藏溢出

Xamarin.Forms 与 Net.Http [关闭]

Xamarin Forms Sharedpreferences 交叉