如何为包含多个控件的项目创建属性?Xamarin上的网格属性Getter
我有一个从Grid继承的UserControl。我有一个Add方法来添加孩子。一切工作正常,如果我在后面的代码中创建UserControl并使用我的Add方法。但是我希望能够在Xaml中添加它。所以我做了一个名为Content的属性。 Setter工作正常,但我无法弄清楚在Getter中放什么。我尝试过的所有东西都失败了。我不确定我应该得到什么,因为它可以包含多个项目。我的Add方法只是创建行或列定义并执行其他布局功能。 Setter会为内容中添加的每个项目调用(在我的示例中是这样两次)。
public class MyControl : Grid
{
public View Content
{
get { return WHAT?; }
set { Add(value); }
}
我想用这样的:
<controls:MyControl>
<controls:MyControl.Content>
<Label Text="test" />
<Label Text="test" />
</controls:MyControl.Content>
</controls:MyControl>
一切我试着给出了错误“物权内容为空或不IEnumerable的”。
IDK,如果我清楚我正在尝试做什么。我基本上正在尝试使用Grid创建自己的StackLayout类型。我称属性内容,但是它确实是网格的子节点。当我删除Setter时,我的网格中不再有任何内容(但我没有办法调用我的Add方法)。我怎样才能捕获项目的添加(Xaml中的项目),以便我可以调用我的Add方法?我不想直接将它添加到继承的Grid中,我必须添加RowDefs或ColumnDefs并设置大小。如果我在代码中这样做,只是调用我的添加它工作正常,但我想在Xaml中执行此操作。 – Kasper
@Kasper阿好吧,现在有道理。如果你看看我链接到的布局类,你可以看到'OnChildAdded'和'OnChildRemoved'方法。当你上链时,你会注意到像OnInternalAdded和OnInternalRemoved这样的方法。可能需要一些工作来破译他们的工作方式,但这应该是一个好的开始。 – hankide