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 访问属性

如何在 XAML [Xamarin.Forms] 中使用 String 以外的类型设置自定义属性值

Xamarin,xaml 中的标签文本不会随着 MVVM Helpers 的属性更改而更改

如何在xamarin表单的XAML中绑定类属性

如何通过绑定xamarin形式使用可绑定属性?

XAML中的Xamarin.Forms ListView AutoHeight