Xamarin 的ListView
定义一个 1 参数构造函数如下:
public ListView([Parameter("CachingStrategy")] ListViewCachingStrategy cachingStrategy)
因此,CachingStrategy
可以在Xaml中使用:
<ListView CachingStrategy="RecycleElement" .../>
我想知道我怎样才能做同样的事情。以下代码无法编译,因为ParameterAttribute
是 Xamarin.Forms 的内部:
public ItemListControl([Parameter("IsReadOnly")] bool isReadOnly)
我抄了课ParameterAttribute
来自 Xamarin.Forms 和上面的编译,但对 Xaml 处理没有影响。这是类,供参考:
[AttributeUsage(AttributeTargets.Parameter)]
internal sealed class ParameterAttribute : Attribute
{
public ParameterAttribute(string name)
{
Name = name;
}
public string Name { get; }
}
我有什么遗漏的吗?
为了让事情变得更简单,我建议创建一个BindableProperty for IsReadOnly
。但你可以随时使用x:Arguments将参数传递给构造函数:
<local:ItemListControl ...>
<x:Arguments>
<x:Boolean>true</x:Boolean>
</x:Arguments>
</local:ItemListControl>
EDIT - 1
您可以使用一种技巧 - (我不推荐,因为这可能会随时更新在 XAMLC 编译中) - 但您可以确保在定义参数属性时保持命名空间与内部使用的命名空间相同。
namespace Xamarin.Forms
{
[AttributeUsage(AttributeTargets.Parameter)]
internal sealed class ParameterAttribute : Attribute
{
public ParameterAttribute(string name)
{
Name = name;
}
public string Name { get; }
}
}
XAML 的用法如下:
<local:ItemListControl IsReadOnly="true" .. />
EDIT - 2这个黑客似乎只有在以下情况下才有效XAML编译应用于主机控制/页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)