如何将DynamicResource的值发送到自定义控件C#后端?

时间:2019-02-26 07:49:38

标签: c# xamarin xamarin.forms

我创建了一个自定义控件:

<?xml version="1.0" encoding="UTF-8"?>
<Frame xmlns="http://xamarin.com/schemas/2014/forms" 
   xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"          
   xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
   x:Class="Ja.Templates.Button" 
   x:Name="this" 
   Test="{DynamicResource Test}" >
</Frame>

namespace Japanese.Templates
{
    public partial class Button : Frame
    {

        public static readonly BindableProperty TestProperty = 
           BindableProperty.Create(nameof(Test), typeof(string), typeof(Button), 
           default(string), propertyChanged: TestChanged);

        public string Test { get => (string)GetValue(TestProperty); 
                             set => SetValue(TestProperty, value); }

        private static void TestChanged(BindableObject bindable, 
           object oldValue, object newValue)
        {
            var x = 2;
        }

我的问题是,当我进行如下更改时:

Application.Current.Resources["Test"] = "X";
Application.Current.Resources["Test"] = "Y";

然后,该控件没有看到更改,并且在我调试时它没有转到变量x。

1 个答案:

答案 0 :(得分:1)

DynamicResource值更改时,它不会通知您的控件。您可以在官方https://subdomain.test.com/catalog?r=44&color=red中阅读有关此目的的更多信息。我还建议您阅读有关BindableProperties documentation的信息。

在共享代码示例中,您不清楚要做什么,但是,似乎应该通过将值存储在DynamicResource中来替换ViewModel