【问题标题】:Xamarin.Forms MergedDictionariesXamarin.Forms 合并字典
【发布时间】:2018-07-25 04:59:03
【问题描述】:

我创建了一些 XAML 样式并将它们全部作为 MergedDictionaries 添加到 App.xaml.cs 中

<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"  
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Axon.Mobile.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ResourceDictionaries/Colors.xaml"/>
                <ResourceDictionary Source="ResourceDictionaries/GlobalStylesDictionary.xaml"/>
                <ResourceDictionary Source="ResourceDictionaries/KeyStylesDictionary.xaml"/>
                <ResourceDictionary Source="ResourceDictionaries/ReceptionStylesDictionary.xaml"/>
                <ResourceDictionary Source="ResourceDictionaries/PutAwayStylesDictionary.xaml"/>
                <ResourceDictionary Source="ResourceDictionaries/ViewModelLocatorDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

当我使用任何字典中定义的样式作为 StatisResouce 时,此解决方案有效,即:

<Label TextColor="{StaticResource Test1}"/>

但是我想创建动态资源,在这种情况下我需要替换 C# 中的样式。问题是

Application.Current.Resources

包含这 6 个其他字典作为 MergedDictionary 属性。所有给定的字典都是空的。

为什么我不能在 C# 中获得定义的样式?

【问题讨论】:

    标签: c# xamarin.forms


    【解决方案1】:

    这很奇怪,但我注意到我们目前只能使用 TryGetValue 方法访问位于 MergedDictionaries 中的资源:

     if (Application.Current.Resources.TryGetValue("StyleResourceKey", out var objectStyle))
     {
         var style = (Style)objectStyle;
    
         //Edit your style
     }
    

    【讨论】:

    • 这是 Xamarin 中的错误吗? XF 5 现在仍然如此
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 2021-12-19
    • 2011-01-22
    • 2020-12-28
    • 1970-01-01
    • 2017-08-03
    • 2016-10-01
    相关资源
    最近更新 更多