Xamarin XAML x:嵌套类中对属性的静态引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xamarin XAML x:嵌套类中对属性的静态引用相关的知识,希望对你有一定的参考价值。
我正在使用Xamarin编写移动应用程序,我有一个名为Strings的静态类,它包装了我的RESX资源。我想在我的XAML文件中使用x:Static绑定到这些。如果我有一个静态属性要绑定到一个静态类,这是有效的。
我正在删除一些评论和其他非必要的位,但它基本上是这样的:
namespace MyCompany.Resources
{
public static partial class Strings
{
public static string LabelUsername { get { return Resources.LabelUsername; } }
}
}
然后在我的XAML中,我像这样绑定它:
<Entry Placeholder="{x:Static resources:Strings.LabelUsername}"
资源定义为
xmlns:resources="clr-namespace:MyCompany.Resources;assembly=MyCompany"
一切正常。当我向字符串添加嵌套类时,它会崩溃。这个类看起来像这样:
namespace MyCompany.Resources
{
public static partial class Strings
{
public static partial class Label
{
public static string Username { get { return Resources.Label_Username; } }
}
}
}
如果我这样做,那么我会在我的XAML中绑定它,如下所示:
<Entry Placeholder="{x:Static resources:Strings.Label.Username}"
请注意在“resources:”之后我们现在有三个级别(Strings.Label.Username)。这似乎是失败的。当我这样做时,我得到编译错误:在xmlns clr-namespace中找不到类型Strings.Label:MyCompany.Resources; assembly = MyCompany
此外,我可以从我的ViewModel访问嵌套类及其属性。有没有办法让这个工作从XAML?我知道我可以绑定到VM中的变量然后具有该引用Strings.Label.Username,但我不想为每个资源绑定执行此操作。
您的静态属性在绑定中的名称应该是
Strings+LabelUsername.Username
您不仅有拼写错误,而且还尝试使用点符号来引用嵌套类,这将无效。
绑定使用标准的.net反射符号来按名称引用属性和类(它们要么使用字符串上的解析器,要么直接使用反射,不能检查代码库)。嵌套类名使用+
来分隔包含的类名和内部类名。你可以在这里阅读更多相关信息:
C# : having a "+" in the class name?
以上是关于Xamarin XAML x:嵌套类中对属性的静态引用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 XAML [Xamarin.Forms] 中使用 String 以外的类型设置自定义属性值