Xamarin XAML x:嵌套类中对属性的静态引用

问题描述 投票:0回答:1

我正在使用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,但我不想为每个资源绑定执行此操作。

xaml xamarin resources globalization
1个回答
3
投票

您的静态属性在绑定中的名称应该是

Strings+LabelUsername.Username

您不仅有拼写错误,而且还尝试使用点符号来引用嵌套类,这将无效。

绑定使用标准的.net反射符号来按名称引用属性和类(它们要么使用字符串上的解析器,要么直接使用反射,不能检查代码库)。嵌套类名使用+来分隔包含的类名和内部类名。你可以在这里阅读更多相关信息:

C# : having a "+" in the class name?

© www.soinside.com 2019 - 2024. All rights reserved.