您需要在此处使用嵌套标记扩展(您已经使用过);但还需要指定属性的名称。否则,我的测试显示,它被视为一个字符串值并分配给默认内容属性-因此,类型不匹配。
<Label Text="{local:TypeMarkup TheType={x:Type x:Int16}}" ../>
选项2:使用Xaml类型解析器
你可以用
XamlTypeResolver
(参考:
TypeExtension in Xamarin.Forms
)
[ContentProperty(nameof(TheType))]
public class TypeMarkupExtension : IMarkupExtension
{
public string TheType { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (string.IsNullOrEmpty(TheType))
throw new InvalidOperationException("TheType isn't set.");
if (serviceProvider == null)
throw new ArgumentNullException(nameof(serviceProvider));
var typeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver;
if (typeResolver == null)
throw new ArgumentException("No IXamlTypeResolver in IServiceProvider");
var resolvedType = typeResolver.Resolve(TheType, serviceProvider);
return resolvedType?.FullName ?? "Failure";
}
}