如何编写自己的元素,以使其对DynamicResource中的更改做出响应?

时间:2019-02-25 06:00:42

标签: xamarin xamarin.forms

我有这个XAML,每当我的应用程序更改DynamicResource TextColor的值时,Label的文本颜色就会更改

<Label TextColor="{DynamicResource TextColor}" />

我知道我可以这样创建自己的自定义标签:

namespace Ja.Templates
{
    public class Label : Label
    {
        public Label()
        {
            Application.Current.Resources.TryGetValue("TextColor", out object textColor);
            TextColor = (Color)textColor;
        }
    }
}

<t:Label TextColor="{DynamicResource TextColor}" />

我的问题是Template.Label不响应DynamicResource TextColor中的更改。

如何将该功能添加到我的标签中?请注意,这只是一个示例,我的实际代码比仅创建标签还要复杂,但是我尝试给出此问题的最简单代码。谢谢

1 个答案:

答案 0 :(得分:1)

  

我希望发现的是如何使对象响应DynamicResource中的更改

如果需要,可以在.ctor中分配属性和动态资源名称:

public MyLabel()
{
    SetDynamicResource(Label.FontColorProperty, "TextColor");
}

然后在表单的代码后面,为动态资源分配一个值:

Resources["TextColor"] = "Red";