参考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'不是静态的吗?
答案 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}"
如何或为何,我仍然不明白。希望这可以帮助任何遇到同样事情的人,但也会感谢任何可以解释其中的人。