对象'Label'已经有一个孩子,无法添加''。 '标签'只能接受一个孩子

时间:2013-06-18 21:59:07

标签: wpf xaml

我正在尝试使用另一个SO用户提供给我的帮助程序类,以在标签上应用字符串格式。但是,当我应用他的解决方案时,我收到以下错误:

The object 'Label' already has a child and cannot add ''. 'Label' can accept only one child.

这是标签:

<Label Grid.Column="1"
       Grid.Row="1">
    <ui:Helper.Text>
        <PriorityBinding>
            <Binding Path="Worker.Employer.Name" StringFormat="Employer: {0}" />
            <Binding Source="Unemployed" />
        </PriorityBinding>
    </ui:Helper.Text>
    <Binding RelativeSource="{RelativeSource Self}" Path="(ui:Helper.Text)" />
</Label>

错误指向“Binding RelativeSource ...”行。我该怎么做才能解决这个问题?我想使用Label代替TextBlock s,但它已经到了可能不值得的地步。

2 个答案:

答案 0 :(得分:2)

看起来像xaml的情况,假设您的附加属性是Content的{​​{1}}

只需将您的实际Label包装在明确的Content

<Label.Content>

答案 1 :(得分:1)

如果没有对i进行测试,我认为附加属性的定义中存在错误,因为它附加到Helper类本身而不是Label。这样,您只需在标签内容中创建Helper的新实例。然后,当您将绑定添加到内容时,您将获得异常,因为已经存在内容。

我实际上并没有理由将其作为附属财产,并且绑定到自我的附属财产对我来说似乎很笨拙。

尝试以下方法;通过将RegisterAttached(...)替换为Register(...),使Helper.Text成为正常的依赖项属性。 (将帮助器重命名为CompositeString。)然后将CompositeString定义为标签的资源,并将标签的内容绑定到此资源:

<Label>
    <Label.Resources>
        <ui:CompositeString>
            <ui:CompositeString.Text>...</ui:CompositeString.Text>
        </ui:CompositeString>
    </Label.Resources>
    <Label.Content>
        <Binding Path="Text" Source="{StaticResource Test}" />
     </Label.Content>
</Label>

请注意,资源需要在绑定到内容之前定义,这就是绑定获取自己标记的原因。