Xamarin Forms XAML - 创建没有UI的自定义控件?

时间:2018-01-23 18:19:51

标签: c# xaml custom-controls

假设我想在我的XAML中定义一些数据然后在同一个XAML中的多个位置使用,如下所示:

<custom:Definition Identifier="MyTemplate">
   <custom:Data Value="3" />
   <custom:Data Value="6" />
   <custom:Data Value="12" />
</custom:Definition>

<custom:Control Template="MyTemplate" />
<custom:Control Template="MyTemplate" />
<custom:Control Template="MyTemplate" />

所以“模板”对象根本没有显示在UI中,它只是数据。我以为我可以定义一个派生自Element的对象,如下所示:

[ContentProperty("Content")]
public class Definition : Element
{
    public static readonly BindableProperty ContentProperty = BindableProperty.Create(nameof(Content), typeof(List<object), typeof(Definition), null);
    public List<object> Content { get; set; }
    public string Identifier {get; set; }
}

但是,当我这样做时,XAML抱怨“没有找到'内容'的属性,可绑定属性或事件,或者值和属性之间的类型不匹配”。

对于'Content'属性的类型,或者我在标签内放入XAML的内容(即使Definition标签没有子节点)也没关系,我总是得到相同的错误消息。

如何将非UI元素添加到XAML?

1 个答案:

答案 0 :(得分:0)

您的可绑定属性不应设置为如下所示?

[ContentProperty("Content")]
public class Definition : Element
{
    public static readonly BindableProperty ContentProperty = BindableProperty.Create(nameof(Content), typeof(List<object>), typeof(Definition), null);
    public List<object> Content 
    { 
        get { return (List<object>)GetValue(ContentProperty); } 
        set { SetValue(ContentProperty, value); }
    }
    public string Identifier {get; set; }

    public Definition()
    {
        Content = new List<object>();
    }
}

我喜欢你的目的。它适用于许多应用程序。

您的课程注入将在图像上突出显示:

Class injection on the Element's class hierarchy