Xamarin表示静态类引用:向下多级

时间:2017-01-10 02:44:46

标签: c# xaml xamarin.forms

参考Xamarin Forms xaml页面中引用静态变量/属性的概念(https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/xaml_markup_extensions/);有一节关于这样的引用:

BackgroundColor="{x:Static local:AppConstants.ForegroundColor}"

...其中local是声明的命名空间,AppConstants.ForegroundColor引用静态类中的静态属性,如下所示:

namespace XamlSamples
{
    static class AppConstants
    {
        public static readonly Color ForegroundColor =
            Device.OnPlatform(Color.Black, Color.White, Color.White);

        ....
    }
}

我的问题是,如果再降低水平似乎不起作用(不知道怎么说)。例如,如果我想绑定到:

SomeNumericalValue="{x:Static local:AppConstants.ForegroundColor.Hue}"

...它不起作用:它抛出一个编译错误“在xmlns'namespacename ...'中找不到类型AppConstants.ForegroundColor”。它似乎无法再进一步访问'Hue'属性。

我不明白,这适用于WPF,但我找不到在Xamarin Forms中执行此操作的等效方法。我错过了什么吗?是因为'Hue'不是静态的吗?

4 个答案:

答案 0 :(得分:2)

我认为这是因为您的类中的属性只能在运行时访问。

{StaticResource ...在编译时获取值。

{绑定...在运行时执行,所以您需要使用它。

答案 1 :(得分:0)

检查以确保AppConstants是公共类。在上面的代码段中,它不会导致您看到的错误。

答案 2 :(得分:0)

您是否尝试删除x:static并执行以下操作:

SomeNumericalValue="{local:AppConstants.ForegroundColor.Hue}"

答案 3 :(得分:0)

我很快就找到了答案:我回复了自己的评论,但我想最好把它放在这里。

解决方案是在最前面添加'Binding':

SomeNumericalValue="{Binding x:Static local:AppConstants.ForegroundColor.Hue}"

如何或为何,我仍然不明白。希望这可以帮助任何遇到同样事情的人,但也会感谢任何可以解释其中的人。